Pagini recente » Cod sursa (job #1646739) | Cod sursa (job #166146)
Cod sursa(job #166146)
#include <stdio.h>
#include <stdlib.h>
#define nmax 16384
#define infinit 2147000000
int N;
int V[nmax], *G[nmax], GDA[nmax], viz[nmax];
void read()
{
int i, x, y;
freopen("asmax.in", "r", stdin);
scanf("%d", &N);
for (i = 1; i <= N; ++i)
scanf("%d", &V[i]);
for (i = 1; i <= N; ++i)
{
G[i] = (int *)realloc(G[i], sizeof(int));
G[i][0] = 0;
}
for (i = 1; i < N; ++i)
{
scanf("%d%d", &x, &y);
++G[x][0];
G[x] = (int *)realloc(G[x], (1+G[x][0]) * sizeof(int));
G[x][G[x][0]] = y;
++G[y][0];
G[y] = (int *)realloc(G[y], (1+G[y][0]) * sizeof(int));
G[y][G[y][0]] = x;
}
}
void parcour(int n)
{
int i;
GDA[n] = V[n];
viz[n] = 1;
for (i = 1; i <= G[n][0]; ++i)
if (!viz[G[n][i]])
parcour(G[n][i]);
for (i = 1; i <= G[n][0]; ++i)
if (GDA[G[n][i]] > 0)
GDA[n] += GDA[G[n][i]];
}
void write()
{
freopen("asmax.out", "w", stdout);
int i, m = -infinit;
for (i = 1; i <= N; ++i)
if (GDA[i] > m)
m = GDA[i];
printf("%d\n", m);
}
int main()
{
read();
parcour(1);
write();
return 0;
}