Pagini recente » Cod sursa (job #688105) | Cod sursa (job #536834) | Cod sursa (job #2604391) | Cod sursa (job #283308) | Cod sursa (job #775972)
Cod sursa(job #775972)
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
#define nmax 16010
#define pb push_back
vector<int> G[nmax];
int C[nmax], N, A, B, maxim, Used[nmax];
int dfs(int startNode)
{
int sum = C[startNode], x, i;
for(i = 0; i < G[startNode].size(); i++)
{
if(!Used[G[startNode][i]])
{
Used[G[startNode][i]] = 1;
x = dfs(G[startNode][i]);
if(x > 0) sum += x;
}
}
maxim = max(maxim, sum);
return sum;
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int i, j;
scanf("%i", &N);
for(i = 1; i <= N; i++) scanf("%i", &C[i]);
for(i = 1; i < N; i++) scanf("%i %i", &A, &B), G[A].pb(B), G[B].pb(A);
Used[1] = 1;
maxim = -10000;
int x = dfs(1);
printf("%i\n", maxim);
scanf("%i", &i);
return 0;
}