Cod sursa(job #1356244)

Utilizator iarbaCrestez Paul iarba Data 23 februarie 2015 12:14:51
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>
using namespace std;
int st[16001],sf[16001],next[32003],dest[32003],s[16001],stot[16001],viz[16001];
int x,y,n,m,t,i;
int max(int x, int y){if(x>y){return x;}return y;}
void add(int x, int y)
{
	if(st[x]==0){st[x]=t;}
	else{next[sf[x]]=t;}
	next[t]=0;
	dest[t]=y;
	sf[x]=t;
}
void compute(int i)
{
	int j; stot[i]=s[i];viz[i]=1;
	for(j=st[i];j;j=next[j])
	{
		if(viz[j]==0)
		{
			compute(j);
			stot[i]+=max(0,stot[j]);
		}
	}
	m=max(m,stot[i]);
}
int main()
{
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	scanf("%ld",&n);
	for(i=1;i<=n;i++){scanf("%ld",&s[i]);}
	t=0;
	for(i=1;i<n;i++)
	{
		scanf("%ld%ld",&x,&y);
		t++;add(x,y);
		t++;add(y,x);
	}
	m=-1001;
	compute(1);
	printf("%ld",m);
	return 0;
}