Pagini recente » Cod sursa (job #1475330) | Cod sursa (job #2386614) | antr8 | Cod sursa (job #981598) | Cod sursa (job #2201379)
/* ༼⌐■ل͟■༽ */
#include <stdio.h>
#include <stdbool.h>
#define N 16001
int list[N], vf[2 * N], next[2 * N], nr, s[N], max = -16000001;
bool viz[N];
void add(int x, int y) {
vf[++nr] = y;
next[nr] = list[x];
list[x] = nr;
}
void dfs(int x) {
viz[x] = true;
int p, y;
p = list[x];
while (p != 0) {
y = vf[p];
if (!viz[y]) {
dfs(y);
if (s[y] > 0) {
s[x] += s[y];
}
}
p = next[p];
}
if (s[x] > max)
max = s[x];
}
int main() {
FILE *fin, *fout;
int n, i, x, y, prev;
fin = fopen("asmax.in", "r");
fscanf(fin, "%d", &n);
for (i = 1; i <= n; i++)
fscanf(fin, "%d", &s[i]);
for (i = 0; i < n - 1; i++) {
fscanf(fin, "%d%d", &x, &y);
add(x, y);
add(y, x);
}
fclose(fin);
dfs(1);
fout = fopen("asmax.out", "w");
fprintf(fout, "%d", max);
fclose(fout);
return 0;
}