比赛 20160415x 评测结果 WWTTETTWTT
题目名称 游戏内测 最终得分 0
用户昵称 TZJerry 运行时间 6.935 s
代码语言 C++ 内存使用 187.35 MiB
提交时间 2016-04-15 16:02:45
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<queue>
#include<vector>
#define maxn 7001
using namespace std;
int n,b[maxn],cnt,linkk[maxn],ans=9999999;
bool c[maxn];
int a[maxn][maxn];
void work(int q,int w)
{
	bool tt=false;
	for(int k=1;k<=n;k++)
	{
		if(a[q][k]<2)
		{
			for(int i=1;i<=n;i++) if(c[i]==true) b[i]--;
			tt=true;
			a[q][k]++;
			a[k][q]++;
			if(c[k]==false)
			{
				c[k]=true;
				work(k,w+1);
				c[k]=false;
			}
			else 
			{
				work(k,w+1);
			}
			for(int i=1;i<=n;i++) if(c[i]==true) b[i]++;
			a[q][k]--;
			a[k][q]--;
		}
	}
	
	if(tt==false)
	{
		bool ww=true;
		int maxx=0;
		if(q==1)
		{
			for(int i=2;i<=n;i++)
			{
				if(c[i]==false) return;
				else 
				{
					if(c[i]>0) maxx=max(b[i],maxx);
				}
			}
			ans=min(maxx+w+b[1],ans);
		}
		return;
	}
}
int main()
{
	freopen("gamebeta.in","r",stdin);
	freopen("gamebeta.out","w",stdout);
	scanf("%d",&n);
	memset(a,10,sizeof(a));
	for(int i=1;i<=n;i++) scanf("%d",&b[i]);
	for(int i=1;i<=n-1;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		a[x][y]=a[y][x]=0;
	}
	work(1,0);
	cout<<ans<<endl;
	return 0;
}