比赛 20111109 评测结果 AAAAAAAAAA
题目名称 火车站饭店 最终得分 100
用户昵称 Czb。 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-09 10:04:43
显示代码纯文本
#include<stdio.h>

int n,ans,a[100001],v[100001][51],t[100001],x[100001],y[100001];

bool b[100001];

int max(int a,int b)
{
	return a>b?a:b;
}

int dfs(int k,int q)
{
	if(x[k]&&q==1)
	{
		return x[k];
	}
	if(y[k]&&q==2)
	{
		return y[k];
	}
	int i,g,h;
	x[k]=a[k];
	for(i=1;i<=t[k];i++)
	{
		if(!b[v[k][i]])
		{
			b[v[k][i]]=true;
			g=dfs(v[k][i],1);
			h=dfs(v[k][i],2);
			b[v[k][i]]=false;
			x[k]+=h;
			y[k]+=max(g,h);
		}
	}
	if(q==1)
		return x[k];
	return y[k];
}

int main()
{
	freopen("profitz.in","r",stdin);
	freopen("profitz.out","w",stdout);
	int i,p,q;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(i=1;i<n;i++)
	{
		scanf("%d%d",&p,&q);
		t[p]++;
		v[p][t[p]]=q;
		t[q]++;
		v[q][t[q]]=p;
	}
	b[1]=true;
	ans=max(dfs(1,1),dfs(1,2));
	printf("%d\n",ans);
	return 0;
}