比赛 20160415x 评测结果 AWWWWWWAWW
题目名称 游戏内测 最终得分 20
用户昵称 YXH_YXH 运行时间 2.909 s
代码语言 C++ 内存使用 23.18 MiB
提交时间 2016-04-15 16:13:40
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
const int MAXN=500010,oo=(1<<30);
int read(){char ch;	int x=0,f=1;	ch=getchar();
	while('0'>ch||ch>'9'){if(ch=='-')f=-1;	ch=getchar();}
	while('0'<=ch&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';	ch=getchar();}
	return x*f;
}
int N,ca[MAXN];
struct line{int x,y;}eu[MAXN*2];
struct edge{int y,nex;}e[MAXN*2];
int Y_link[MAXN]={},len=0;
void init(){
	N=read();
	for(int i=1; i<=N; i++)ca[i]=read();
	for(int i=1; i<=N-1; i++){
		eu[i*2-1].x=read(),eu[i*2-1].y=read();
		eu[i*2].y=eu[i*2-1].x,eu[i*2].x=eu[i*2-1].y;
	}
}
bool my(line n1,line n2){return ( (ca[n1.y]<ca[n2.y]) || ((ca[n1.y]==ca[n2.y])&&(ca[n1.x]<ca[n2.x])) );}
inline void insert(int x,int y){e[++len].nex=Y_link[x] , Y_link[x]=len;	e[len].y=y;}
void set_map(){
	int ed=(N-1)*2;
	for(int i=1; i<=ed; i++)
		insert(eu[i].x,eu[i].y);
}
int dfn[MAXN*2]={},tot=-1;
void dfn_low(int x){
	dfn[x]=++tot;
	for(int i=Y_link[x]; i; i=e[i].nex){//树
		if(!dfn[e[i].y]){
			dfn_low(e[i].y);
			tot++;
		}
	}
}
int  main(){
	freopen("gamebeta.in","r",stdin);
	freopen("gamebeta.out","w",stdout);
	
	init();
	std::sort(eu+1,eu+1+(N-1)*2,my);
	set_map();
	dfn_low(1);
	dfn[1]=(N-1)*2;
	int Max=-1000;
	for(int i=1; i<=N; i++){
		int tt=dfn[i]+ca[i];
		Max=std::max(tt,Max);
	}
	printf("%d\n",Max);
	return 0;
}
/*
*/