比赛 20160415x 评测结果 AWWWWWEWWW
题目名称 游戏内测 最终得分 10
用户昵称 bhiaibogf 运行时间 1.649 s
代码语言 C++ 内存使用 11.76 MiB
提交时间 2016-04-15 14:51:36
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

typedef pair<int,int> PII;
const int MAXN=(5*1e5+5);
int val[MAXN];
PII f[MAXN];
vector<int> g[MAXN];
int read(){
	int r=0;char c;
	while(!isdigit(c=getchar()));
	while(r=r*10+c-'0',isdigit(c=getchar()));
	return r;
}

void Add(){
	int u=read(),v=read();
	g[u].push_back(v);
	g[v].push_back(u);
}void Init(){
	int n=read();
	for(int i=1;i<=n;i++) val[i]=read();
	for(int i=1;i<n;i++) Add();
}

PII F(int u,int p){
	int ans=val[u],cnt=0;
	for(int i=0;i<g[u].size();i++){
		int v=g[u][i];
		if(v==p) continue;
		//cout<<u<<"->"<<v<<endl;
		f[cnt++]=F(v,u);
	}
	sort(f,f+cnt);
	int d=0;
	while(cnt--){
		ans=max(ans,d+f[cnt].first+1);
		d+=f[cnt].second+2;
	}
	return make_pair(ans,d);
}

int main(){
#ifdef bhiaibogf
	freopen("in.in","r",stdin);
#else
	freopen("gamebeta.in","r",stdin);
	freopen("gamebeta.out","w",stdout);
#endif
	Init();
	int ans=0,cnt=0;
	for(int i=0;i<g[1].size();i++){
		int v=g[1][i];
		f[cnt++]=F(v,1);
	}
	sort(f,f+cnt);
	int d=0;
	while(cnt--){
		ans=max(ans,d+f[cnt].first+1);
		d+=f[cnt].second+2;
	}
	ans=max(ans,val[1]+d);
	printf("%d\n",ans);
	return 0;
}