比赛 20111109 评测结果 AAAAAAAAAA
题目名称 火车站饭店 最终得分 100
用户昵称 Truth.Cirno 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-09 10:26:25
显示代码纯文本
#include <cstdio>
#include <iostream>
using namespace std;

int n,maxdep=1,ben[100001]/*,dad[100001]*/,dep[100001]={0},way[100001]={0},map[100001][51];
long long f[100001][2]={{0}};
bool used[100001]={false},una[100001][51]={{false}};

long long findmax(long long a,long long b)
{
	if (a>b)
		return(a);
	else
		return(b);
}

void make(int pos,int depnow)
{
    int i,j;
	if (depnow>maxdep)
		maxdep=depnow;
	dep[pos]=depnow;
    for (i=0;i<way[pos];i++)
    {
        if (!una[pos][i])
        {
			for (j=0;j<way[map[pos][i]];j++)
				if (map[map[pos][i]][j]==pos)
				{
					una[map[pos][i]][j]=true;
					break;
				}
//			dad[map[pos][i]]=pos;
			make(map[pos][i],depnow+1);
        }
    }
}

void work(int pos,int depnow)
{
	int i;
	long long temp=0,temp2=0;
	if (depnow==maxdep)
	{
		f[pos][1]=ben[pos];
		f[pos][0]=0;
	}
	else
	{
		for (i=0;i<way[pos];i++)
		{
			if (!una[pos][i])
			{
				work(map[pos][i],depnow+1);
			}
		}
		for (i=0;i<way[pos];i++)
		{
			if (!una[pos][i])
			{
				temp+=findmax(f[map[pos][i]][1],f[map[pos][i]][0]);
				temp2+=f[map[pos][i]][0];
			}
		}
		f[pos][0]=temp;
		f[pos][1]=temp2+ben[pos];
	}
}
/*
long long fill(int x,bool flag)
{
	int i;
	long long temp;
	if (flag==1)
	{
		temp=0;
		for (i=0;i<way[x];i++)
		{
			if (!used[map[x][i]])
			{
				used[map[x][i]]=true;
				temp+=fill(f[map[x][i]][0],0);
				used[map[x][i]]=false;
			}
		}
		return(temp);
	}
	else //if (flag==0)
	{
		
	}
	return(0);
}
*/
int main(void)
{
	freopen("profitz.in","r",stdin);
	freopen("profitz.out","w",stdout);
	int i,temp,temp2;
	scanf("%d\n",&n);
	for (i=1;i<=n;i++)
		scanf("%d\n",&ben[i]);
	for (i=1;i<=n-1;i++)
	{
		scanf("%d %d\n",&temp,&temp2);
		map[temp][way[temp]++]=temp2;
		map[temp2][way[temp2]++]=temp;
	}
//	used[1]=true;
//	f[1][0]=fill(1,0);
//	f[1][1]=fill(1,1);
	make(1,1);
	work(1,1);
	if (f[1][0]>f[1][1])
		cout<<f[1][0]<<endl;
	else
		cout<<f[1][1]<<endl;
	fclose(stdin);
	fclose(stdout);
	return(0);
}