比赛 20111109 评测结果 TTTEEEEEEE
题目名称 火车站饭店 最终得分 0
用户昵称 Makazeu 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-09 11:42:56
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
typedef unsigned short int usint; 
const int MAXN=5000;
int Mon[MAXN];
usint Mat[MAXN][51];
bool tmp[MAXN];
int N;
int MAX=0;

void init()
{
	scanf("%d\n",&N);
	Mon[0]=0;
	for (int i=1;i<=N;i++)
	{
		scanf("%d\n",&Mon[i]);
		Mat[i][0]=0;
		tmp[i]=true;
	}
	int a,b;
	for(int i=1;i<=N-1;i++)
	{
		scanf("%d %d\n",&a,&b);
		Mat[a][0]++;
		Mat[a][ Mat[a][0] ]=b;
		
		Mat[b][0]++;
		Mat[b][ Mat[b][0] ]=a;
	}
	Mat[0][0]=0;
}

void dfs(int now,int mon)
{
	tmp[now]=false;
	if(mon>MAX)
		MAX=mon;
	for (int i=1;i<=N;i++)
	{
		bool flag=true;
		
		for (int k=1;k<=N;k++)
		{
			if(tmp[k])
				continue;
			for (int j=1;j<=Mat[k][0];j++)
			{
				if(Mat[k][j]==i || !tmp[i])
				{
					flag=false;
					break;
				}
			}
			if(!flag)
				break;
		}
		if(flag)
		{
			dfs(i,mon+Mon[i]);
		}
	}
	tmp[now]=true;
}


int main()
{
	freopen("profitz.in","r",stdin);
	freopen("profitz.out","w",stdout);
	init();
	dfs(0,0);
	cout<<MAX<<endl;
	return 0;
}