Cod sursa(job #253252)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 16:39:31
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
 #include <stdio.h>  
 #include <vector>  
 #include <bitset>  
 #define Nmax 16001  
 #define min -(1<<30)  
 #define pb push_back  
 #define IN "asmax.in"  
 #define OUT "asmax.out"  
   
 using namespace std;  
   
 vector< vector<int> > a(Nmax);  
 vector <int> s(Nmax);  
 vector <int> mark(Nmax);  
   
 int n,i,sol=min;  
   
 void scan()  
 {  
     freopen(IN, "r",stdin);  
     freopen(OUT, "w",stdout);  
     scanf("%d", &n);  
 }     
   
 void dfs(int x)  
 {  
     int l=a[x].size();  
     mark[x]=1;  
     for (long i=0;i<l;++i)  
         if (!mark[a[x][i]])  
         {  
             dfs(a[x][i]);  
             if (s[a[x][i]]>0)  
                s[x]+=s[a[x][i]];  
         }  
     if (s[x]>sol)  
         sol=s[x];  
 }  
   
 void solve()  
 {  
     int x,y;  
     for (i=1;i<=n;++i)  
         scanf("%d", &s[i]);  
       
     for (i=1;i<n;++i)  
     {  
         scanf("%d %d",&x,&y);  
         a[x].pb(y);  
         a[y].pb(x);  
     }  
     dfs(1);  
     printf("%d\n",sol);  
 }     
   
 int main()  
 {  
     scan();  
     solve();  
   }