Pagini recente » Cod sursa (job #2352765) | Cod sursa (job #1088174) | Cod sursa (job #31497) | Cod sursa (job #2528587) | Cod sursa (job #1443681)
//0111
#include <cstdio>
#include <list>
#define li list<int>::iterator
#define VM -16000000
using namespace std;
list<int> e[16010];
long v[16010], best[16010];
bool inst[16010];
void arb(int nod) {
best[nod] = v[nod];
inst[nod] = true;
for (li it = e[nod].begin(); it != e[nod].end(); it++)
if (!inst[*it]) {
arb(*it);
best[nod] += (best[*it] >= 0) ? best[*it] : 0;
}
}
int main() {
FILE* fi = fopen("asmax.in", "rt");
FILE* fo = fopen("asmax.out", "wt");
int n;
fscanf(fi, "%d", &n);
for (int i = 0; i < n; i++) {
fscanf(fi, "%d", &v[i]);
inst[i] = false;
}
for (int i = 1; i < n; i++) {
int a, b;
fscanf(fi, "%d%d", &a, &b);
a--; b--;
e[a].push_back(b);
e[b].push_back(a);
}
long minim = VM;
arb(0);
for (int i = 0; i < n; i++) {
if (best[i] > minim)
minim = best[i];
}
fprintf(fo, "%ld", minim);
return 0;
}