Pagini recente » Cod sursa (job #1290634) | Cod sursa (job #1459621) | Cod sursa (job #1819418) | Cod sursa (job #2041719) | Cod sursa (job #2462512)
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
const int NMAX = 16001;
vector <int> v[NMAX];
int s[NMAX], viz[NMAX], val[NMAX];
int DFS(int nod) {
//int fiu;
if (viz[nod] == 1)
return s[nod];
viz[nod] = 1;
// maxim = -16000001;
// if (v.size == 0)
s[nod] = val[nod];
for (int fiu : v[nod]) {
if (viz[fiu] == 0 && DFS (fiu) >= 0)
s[nod] += s[fiu];
// if (s[fiu] > maxim])
// maxim = s[fiu];
}
// if (maxim < 0)
// s[nod] = maxim;
return s[nod];
}
int main() {
freopen ("asmax.in", "r", stdin);
freopen ("asmax.out", "w", stdout);
int n, i, pp, maxim, a, b;
scanf ("%d", &n);
pp = 1;
for (i = 1; i <= n; i++) {
scanf ("%d", &val[i]);
if (val[i] >= 0)
pp = 0;
}
if (pp == 1) {
maxim = -1001;
for (i = 1; i <= n; i++)
if (val[i] > maxim)
maxim = val[i];
printf ("%d", maxim);
}
else {
for (i = 1; i < n; i++) {
scanf ("%d%d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
DFS(1);
maxim = s[1];
for (i = 2; i <= n; i++)
if (s[i] > maxim)
maxim = s[i];
printf ("%d", maxim);
}
return 0;
}