Pagini recente » Cod sursa (job #1708767) | Cod sursa (job #2830216) | Cod sursa (job #2573891) | Cod sursa (job #2112218) | Cod sursa (job #1151449)
#include<stdio.h>
using namespace std;
int val[16005], vf[32005], lst[32005], urm[32005], m, viz[16005], sum[16005], max;
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];
}
}
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);
}
dfs(1);
max = sum[1];
for (i = 2; i <= n; i++)
if (max < sum[i])
max = sum[i];
fprintf (out, "%d", max);
return 0;
}