我知道我很呆。。。
代码如下
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000010;
int inf=0x7f7f7f7f;
int f[N],size[N],head[N],dep[N];
int n,centre,sum=0;//centre为重心
vector<int>G[N];
queue<int>q;
void getcentre(int u,int fa)
{
size[u]=1;
f[u]=0;
for(int i=0; i<G[u].size(); i++)
{
int v=G[u][i];
if(v==fa)
continue;
getcentre(v,u);
size[u]+=size[v];
f[u]=max(f[u],size[v]);
f[u]=max(f[u],n-size[u]);
if(f[u]<f[centre]||(f[u]==f[centre]&&u<centre))
centre=u;
}
}
void bfs()
{
q.push(centre);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(dep[v]||v==centre)
continue;
dep[v]=dep[u]+1;
sum+=dep[v];
q.push(v);
}
}
}
signed main()
{
scanf("%lld",&n);
for(int i=1;i<n;i++)
{
int u,v;
scanf("%lld%lld",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
centre=0;f[0]=inf;
getcentre(1,0);
bfs();
printf("%lld %lld",centre,sum);
return 0;
}