Pagini recente » Cod sursa (job #1006966) | Cod sursa (job #522090) | Cod sursa (job #47897) | Cod sursa (job #322564) | Cod sursa (job #6043)
Cod sursa(job #6043)
#include <stdio.h>
#include <vector>
using namespace std;
const int N_MAX = 16069;
const int INF = 2000000000;
int N;
int val[N_MAX], rez[N_MAX], viz[N_MAX];
vector <int> G[N_MAX];
void DFS(int nod)
{
vector <int>::iterator it;
rez[nod] = val[nod];
viz[nod] = 1;
for (it = G[nod].begin(); it != G[nod].end(); ++ it) {
if (!viz[*it]) {
DFS(*it);
if (rez[*it] > 0) {
rez[nod] += rez[*it];
}
}
}
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d\n", &N);
int i, maxx = -INF;
for (i = 1; i <= N; i ++) {
scanf("%d ", &val[i]);
if (val[i] > maxx) {
maxx = val[i];
}
}
if (maxx < 0) {
printf("%d\n", maxx);
} else {
int x, y;
for (i = 1; i < N; i ++) {
scanf("%d %d\n", &x, &y);
G[x].push_back(y);
G[y].push_back(x);
}
DFS(1);
int MAX = 0;
for (i = 1; i <= N; i ++) {
if (rez[i] > MAX) {
MAX = rez[i];
}
}
printf("%d\n", MAX);
}
return 0;
}