比赛 20160415x 评测结果 AWAEETTWTT
题目名称 游戏内测 最终得分 20
用户昵称 sro_lzh_mzx_dydx 运行时间 4.158 s
代码语言 C++ 内存使用 0.68 MiB
提交时间 2016-04-15 16:26:17
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
	while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
	return x*f;
}
int n;
int a[310][310],vis[310],ans=-1111;
int main()
{
	freopen("gamebeta.in","r",stdin);
	freopen("gamebeta.out","w",stdout);
	n=read();
	memset(a,10,sizeof(a));
	for(int i=1;i<=n;i++)vis[i]=read();
	for(int i=1;i<n;i++){
		int ll=read(),rr=read();
		a[ll][rr]=1;
		a[rr][ll]=1;
	}
	for(int i=1;i<=n;i++)a[i][i]=0;
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				if(a[i][j]>a[i][k]+a[k][j])
					a[i][j]=a[i][k]+a[k][j];
	/*for(int i=1;i<=n;i++)
	{
		for(int k=1;k<=n;k++)
		{
			cout<<a[i][k]<<' ';
		}
		cout<<endl;
	}*/
	for(int i=1;i<=n;i++)ans=max(a[1][i]+vis[i],ans);
	printf("%d\n",ans);
	//for(int i=1;i<=n;i++)printf("%d,",vis[i]);
	return 0;
}