Pagini recente » Cod sursa (job #1303475) | Cod sursa (job #2735165) | Cod sursa (job #2731394) | Cod sursa (job #1241178) | Cod sursa (job #362354)
Cod sursa(job #362354)
#include<stdio.h>
#include<vector>
#define NMAX 16001
using namespace std;
vector<int>A[NMAX];
int N, c[NMAX], R[NMAX], U[NMAX];
void DFS(int nod)
{ int i;
R[nod] = c[nod];
U[nod] = 1;
for(i = 0; i < A[nod].size(); i++)
if(U[A[nod][i]] == 0)
{
DFS(A[nod][i]);
if(R[A[nod][i]] > 0)
R[nod] += R[A[nod][i]];
}
}
int main()
{ int i,a,b,maxim;
freopen("asmax.in", "r",stdin);
freopen("asmax.out", "w", stdout);
scanf("%d", &N);
for(i = 1; i <= N; i++)
scanf("%d", &c[i]);
for(i = 1; i <= N-1; i++)
{
scanf("%d%d", &a, &b);
A[a].push_back(b);
A[b].push_back(a);
}
DFS(1);
maxim = -2000;
for(i = 1; i <= N; i++)
if(R[i] > maxim) maxim = R[i];
printf("%d\n", maxim);
}