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