rt,代码如下
#include<bits/stdc++.h>
using namespace std;
long long n,cnt,m,dp[1000005],f[1000005],h[1000005],d[1000005],ans;
struct edge
{
int to;
int next;
int val;
}e[2000005];
void addedge(int u,int v,int w)
{
cnt++;
e[cnt].to=v;
e[cnt].val=w;
e[cnt].next=h[u];
h[u]=cnt;
}
void dfs1(int x,int fa)
{
dp[x]=1;
d[x]=d[fa]+1;
for(int i=h[x];i;i=e[i].next)
{
if(e[i].to==fa) continue;
dfs1(e[i].to,x);
dp[x]+=dp[e[i].to];
}
}
void dfs2(int x,int fa)
{
for(int i=h[x];i;i=e[i].next)
{
if(e[i].to==fa) continue;
f[e[i].to]=f[x]-2*dp[e[i].to]+n;
dfs2(e[i].to,x);
}
}
int main()
{
freopen("P3478_6.in","r",stdin);
freopen("P3478_6.out","w",stdout);
cin>>n;
for(int i=1;i<=n-1;i++)
{
int a,b,c;
cin>>a>>b;
addedge(a,b,1);
addedge(b,a,1);
}
dfs1(1,0);
for(int i=1;i<=n;i++)
{
f[1]+=d[i];
}
dfs2(1,0);
int maxn=0;
for(int i=1;i<=n;i++)
{
if(maxn<f[i])
{
maxn=f[i];
ans=i;
}
}
cout<<ans<<endl;
return 0;
}