比赛 |
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;
}