Pagini recente » Cod sursa (job #396386) | Cod sursa (job #562222) | Cod sursa (job #1586374) | Cod sursa (job #1520873) | Cod sursa (job #569974)
Cod sursa(job #569974)
#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;
}