Pagini recente » Cod sursa (job #1275616) | Cod sursa (job #1056100) | Cod sursa (job #606233) | Cod sursa (job #1020910) | Cod sursa (job #43274)
Cod sursa(job #43274)
#include<stdio.h>
#define maxn 16*1024
long sel[maxn];
long v[maxn*2],max=0;
long next[maxn*2];
long first[maxn];
long val[maxn];
long df(long a)
{
long x,p,s=0;
sel[a] = 1;
x = first[a];
while(x)
{
if(sel[v[x]]==0)
{
p = df(v[x]);
s+=p;
}
x = next[x];
}
if(s+val[a]>max) max = s+val[a];
if(s+val[a]<0) return 0;
return s+val[a];
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
long i,a,b,n;
scanf("%ld",&n);
for(i=1;i<=n;i++) scanf("%ld",&val[i]);
for(i=1;i<n;i++)
{
scanf("%ld%ld",&a,&b);
v[i*2-1] = a;
v[i*2] = b;
next[ i*2] = first[a]; first[a] = i*2;
next[ i*2-1] = first[b]; first[b] = i*2-1;
}
df(1);
printf("%ld",max);
return 0;
}