Pagini recente » Cod sursa (job #1765208) | Cod sursa (job #1033813) | Cod sursa (job #2084021) | Cod sursa (job #962119) | Cod sursa (job #1151436)
#include<stdio.h>
using namespace std;
int val[16005], vf[32005], lst[32005], urm[32005], m, viz[16005], sum[16005], max = -1;
void adaugare (int x, int y)
{
m++;
vf[m] = y;
urm[m] = lst[x];
lst[x] = m;
}
void dfs(int x)
{
int y, p;
viz[x] = true;
p = lst[x];
sum [x] = val[x];
while (p != 0)
{
y = vf[p];
if (!viz[y])
{
dfs(y);
if (sum[x] + sum[y] > sum[x])
sum[x] += sum[y];
}
p = urm[p];
}
if (sum[x] > max)
max = sum[x];
}
int main ()
{
FILE *in ,*out;
in = fopen ("asmax.in", "r");
out = fopen ("asmax.out", "w");
int i,n;
fscanf (in, "%d", &n);
for (i = 1; i <= n; i++)
fscanf(in, "%d", &val[i]);
int x, y;
for (i = 1; i <= n - 1; i++)
{
fscanf (in, "%d%d", &x, &y);
adaugare(x, y);
adaugare(y, x);
}
for (i = 1; i <= n; i++)
dfs(i);
fprintf (out, "%d", max);
return 0;
}