Pagini recente » Cod sursa (job #1459183) | Cod sursa (job #2282011) | Cod sursa (job #1647791) | Cod sursa (job #1888877) | Cod sursa (job #1468277)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define NN 16001
int n, i, v, s, e;
typedef struct chld {
int e;
struct chld *n;
} chld;
chld *chlds[NN];
int viz[NN];
int S[NN];
unsigned int gsum = INT_MIN;
inline int max(int a, int b) {
return a > b ? a : b;
}
unsigned long long solve(int i) {
int ms = 0;
chld *c = chlds[i];
while (c) {
if (viz[c->e] == 0) {
viz[c->e] = 1;
ms += max(solve(c->e), 0);
}
c = c->n;
}
gsum = max(ms + S[i], gsum);
return max(ms + S[i], 0);
}
int main() {
chld *ch;
FILE *fi, *fo;
fi = freopen("asmax.in", "r", stdin);
fo = freopen("asmax.out", "w", stdout);
scanf("%d", &n);
for(i=1;i<=n;i++) scanf("%d", S + i);
for(i = 1; i < n; i++) {
scanf("%d %d", &s, &e);
ch = (chld*) malloc(sizeof(chld));
ch->e = e;
ch->n = chlds[s];
chlds[s] = ch;
ch = (chld*) malloc(sizeof(chld));
ch->e = s;
ch->n = chlds[e];
chlds[e] = ch;
}
solve(1);
printf("%d\n", gsum);
fclose(fi);
fclose(fo);
return 0;
}