Cod sursa(job #569974)

Utilizator VmanDuta Vlad Vman Data 2 aprilie 2011 13:00:56
Problema Asmax Scor 10
Compilator cpp Status done
Runda preselectie_acm_unibuc Marime 0.76 kb
#include <cstdio>
#include <vector>
using namespace std;

#define Nmax 16001

int N, W[Nmax],A[Nmax], V[Nmax], i, x,y, tot;
vector<int> G[Nmax];

void df(int nod)
{
 vector<int> :: iterator it;
 A[nod] = V[nod];
 W[nod] = 1;
 for (it=G[nod].begin(); it<G[nod].end(); ++it)
     if (!W[*it]) df(*it);
 for (it=G[nod].begin(); it<G[nod].end(); ++it)
     if (A[*it] > 0) A[nod] += A[*it];
 if (A[nod] > tot) tot=A[nod];
}

int main()
{
 freopen("asmax.in","r",stdin);
 freopen("asmax.out","w",stdout);
 scanf("%d", &N);
 for (i=1; i<=N; ++i)
     scanf("%d", &V[i]);
 for (i=1; i<N; ++i)
     {
      scanf("%d %d", &x, &y);
      G[x].push_back(y);
      G[y].push_back(x);      
     }
 
 df(1);
 
 printf("%d\n", tot);
 
 return 0;
}