Pagini recente » Cod sursa (job #315412) | Cod sursa (job #1845595) | Cod sursa (job #1680651) | Cod sursa (job #2463768) | Cod sursa (job #43285)
Cod sursa(job #43285)
#include<stdio.h>
#define maxn 16*1024
long sel[maxn];
long v[maxn*2],max=-1000;
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]);if(val[i]>max) max=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;
}