6、9、10RE
8WA
代码奉上
#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
struct edge {
int to,nxt;
} e[maxn];
long long int n,cnt,id;
long long int head[maxn];
long long ans;
long long f[maxn],dep[maxn],size[maxn];
inline void add(int u,int v)
{
e[++cnt].nxt=head[u];
head[u]=cnt;
e[cnt].to=v;
}
void dfs1(int x,int fa){
size[x]=1;
dep[x]=dep[fa]+1;
for(int i=head[x]; i; i=e[i].nxt) {
long long int y=e[i].to;
if(y==fa) {
continue;
}
dfs1(y,x);
size[x]+=size[y];
}
}
void dfs2(int x,int fa){
for(int i=head[x]; i; i=e[i].nxt) {
long int y=e[i].to;
if(y==fa) {
continue;
}
f[y]=f[x]+n-2*size[y];
dfs2(y,x);
}
}
int main(){
scanf("%d",&n);
for(int i=1; i<n; i++) {
int u,v;
scanf("%d%d",&u,&v);
add(u,v),add(v,u);
}
dfs1(1,0);
for(int i=1; i<=n; i++) {
f[1]+=dep[i];
}
dfs2(1,0);
for(int i=1; i<=n; i++)
if(ans<f[i]) {
ans=f[i],id=i;
}
printf("%d",id);
return 0;
}