Pagini recente » Cod sursa (job #1791887) | Cod sursa (job #221409) | Cod sursa (job #987580) | Cod sursa (job #2010341) | Cod sursa (job #1774259)
#include<stdio.h>
#include<vector>
#define MINIMPOS -2000000000
using namespace std;
vector<int> graf[16001];
int val[16001], maxim, viz[16001];
FILE *in, *out;
int sum(int nod)
{
int toto = val[nod], x;
viz[nod] = 1;
for(int i = 0; i < graf[nod].size(); i++) {
if(viz[graf[nod][i]] == 0) {
x = sum(graf[nod][i]);
toto = toto + x;
}
}
if(toto < 0) {
toto = 0;
} else {
if(toto > maxim) {
maxim = toto;
}
}
viz[nod] = 0;
return toto;
}
int main ()
{
in = fopen("asmax.in", "r");
out = fopen("asmax.out", "w");
int n;
fscanf(in, "%d", &n);
maxim = MINIMPOS;
for(int i = 1; i <= n; i++) {
fscanf(in, "%d", &val[i]);
if(val[i] > maxim) {
maxim = val[i];
}
}
int a, b;
for(int i = 1; i < n; i++) {
fscanf(in, "%d%d", &a, &b);
graf[a].push_back(b);
graf[b].push_back(a);
}
sum(1);
fprintf(out, "%d", maxim);
fclose(in);
fclose(out);
return 0;
}