Pagini recente » Cod sursa (job #2544625) | Cod sursa (job #1184861) | Cod sursa (job #38822) | Cod sursa (job #79205) | Cod sursa (job #33449)
Cod sursa(job #33449)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NMAX 16001
int U[NMAX], *m[NMAX], g[NMAX], v[NMAX], s[NMAX], N, max;
void DF(int nod)
{
int i;
U[nod] = 1;
s[nod] = v[nod];
for (i = 0; i < g[nod]; i++)
if (!U[m[nod][i]])
{
DF(m[nod][i]);
if (s[m[nod][i]] > 0)
s[nod] += s[m[nod][i]];
}
if (s[nod] > max)
max = s[nod];
}
int main()
{
int i, a, b;
freopen("asmax.in", "rt", stdin);
freopen("asmax.out", "wt", stdout);
scanf("%d", &N);
for (i = 1; i <= N; i++)
scanf("%d", &v[i]);
for (i = 1; i < N; i++)
{
scanf("%d %d", &a, &b);
g[a]++;
g[b]++;
}
fseek(stdin, 0, SEEK_SET);
for (i = 1; i <= N; i++)
m[i] = (int *) malloc(g[i] * sizeof(int));
memset(g, 0, sizeof(g));
scanf("%d", &N);
for (i = 1; i <= N; i++)
scanf("%d", &v[i]);
for (i = 1; i < N; i++)
{
scanf("%d %d", &a, &b);
m[a][g[a]++] = b;
m[b][g[b]++] = a;
}
max = -10000;
DF(1);
printf("%d\n", max);
return 0;
}