Cod sursa(job #43274)

Utilizator marius135Dumitran Adrian Marius marius135 Data 29 martie 2007 22:46:32
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#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;
}