Pagini recente » Cod sursa (job #2923317) | Cod sursa (job #1352076) | Cod sursa (job #2579946) | Statistici Gaspar-Garu Stefan (Gaspar_Stefan) | Cod sursa (job #13872)
Cod sursa(job #13872)
#include <stdio.h>
#include <stdlib.h>
#define infinit 2000000000
#define nm 16665
int N, max, min, i, s, a, b, x;
int V[nm], *d[nm], viz[nm];
int dfs(int);
int main(void)
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
for (scanf("%d", &N), max = -(min = infinit), i = 1; i <= N; ++i)
{
scanf("%d", &V[i]);
if (V[i] > max) max = V[i];
if (V[i] < min) min = V[i];
s+=V[i];
}
for (i = 1; i < nm; ++i)
{
d[i] = (int *)realloc(d[i], sizeof(int));
d[i][0] = 0;
}
for (i = 1; i < N; ++i)
{
scanf("%d%d", &a, &b);
++d[a][0]; ++d[b][0];
d[a] = (int *)realloc(d[a], (d[a][0] + 1) * sizeof(int));
d[b] = (int *)realloc(d[b], (d[b][0] + 1) * sizeof(int));
d[a][d[a][0]] = b;
d[b][d[b][0]] = a;
}
x = dfs(1);
printf("%d\n", x);
return 0;
}
int dfs(int x)
{
int S = V[x], i;
for (i = viz[x] = 1; i <= d[x][0]; ++i)
if (!viz[d[x][i]])
S += (s = dfs(d[x][i]));
if (S > 0) return S;
return 0;
}