Pagini recente » Cod sursa (job #1973019) | Cod sursa (job #2703211) | Cod sursa (job #1073372) | Cod sursa (job #2225460) | Cod sursa (job #621030)
Cod sursa(job #621030)
#include <stdio.h>
#include <math.h>
#include <vector>
using namespace std;
long i, n, mx, cost[16010], vaz[16010], best[16010];
vector < long > v[16010];
void df(long nod) {
vaz[nod] = 1;
best[nod] = cost[nod];
long len = v[nod].size();
for (long i = 0; i < len; ++i) {
if (vaz[v[nod][i]] == 0) {
df(v[nod][i]);
if (best[v[nod][i]] > 0) {
best[nod] += best[v[nod][i]];
}
}
}
if (best[nod] > mx) mx = best[nod];
}
int main() {
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%ld", &n);
for (i = 1; i <= n; ++i) {
scanf("%ld", &cost[i]);
}
long A, B;
for (i = 1; i < n; ++i) {
scanf("%ld %ld", &A, &B);
v[A].push_back(B);
v[B].push_back(A);
}
mx = -2000000000;
df(1);
printf("%ld\n", mx);
return 0;
}