Submission #1575391
Source Code Expand
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int TAM = 100004; vector <ll> adj [TAM]; ll val [TAM], pt [TAM]; int n; void form( int x ){ int nxt; for( int i = 0 ; i < adj[x].size() ; i ++ ){ nxt = adj[x][i]; if( nxt == pt[x] ) continue; pt[nxt] = x; //cout << " parent " << nxt << " = " << pt[nxt] << endl ; form(nxt); } } ll dn, up; void solve ( ll cap , ll sum ){ dn = sum - cap; up = cap - dn; } bool pos = 1; ll find_up( int x ){ //cout << " IN " << x << endl ; if( adj[x].size() == 1 ) return val[x]; ll sum = 0, cap = val[x]; int nxt; ll v; for( int i = 0 ; i < adj[x].size() ; i ++ ){ nxt = adj[x][i]; if( nxt == pt[x] ) continue; v = find_up(nxt); sum += v if( v > cap ) pos = 0; //cout << x << " -> " << nxt << " = " << v << endl ; } solve( cap , sum ); if( dn + up != cap or dn < 0 or up < 0 ) pos = 0; return up; } int main(){ int a, b; scanf("%d",&n); for( int i = 1 ; i <= n ; i ++ ) scanf("%lld",&val[i]); for( int i = 0 ; i < n-1 ; i ++ ){ scanf("%d%d",&a,&b); adj[a].push_back(b); adj[b].push_back(a); } if( n == 2 ){ if( val[1] == val[2] ) printf("YES\n"); else printf("NO\n"); return 0; } int rt; for( int i = 1 ; i <= n ; i ++ ){ if( adj[i].size() > 1 ){ pt [i] = i; form(i); rt = i; break; } } if( !find_up(rt) and pos ) printf("YES\n"); else printf("NO\n"); return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - Cleaning |
User | vjudge1 |
Language | C++14 (GCC 5.4.1) |
Score | 0 |
Code Size | 1650 Byte |
Status | CE |
Compile Error
./Main.cpp: In function ‘ll find_up(int)’: ./Main.cpp:40:9: error: expected ‘;’ before ‘if’ if( v > cap ) pos = 0; ^ ./Main.cpp: In function ‘int main()’: ./Main.cpp:51:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d",&n); ^ ./Main.cpp:53:30: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%lld",&val[i]); ^ ./Main.cpp:55:28: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d%d",&a,&b); ^