P1395 会议 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
const int N = 5e4+10;
vector<int> q[N];
int vis[N];
int flag=0;
int n,d;
int g[N],f[N];
void init(int n)
{
for(int i=1;i<=n;i++) g[i]=1;
}
int dfsgetzhongxin(int x)
{
vis[x]=1;
for(int i=0;i<q[x].size();i++)
{
if(!vis[q[x][i]])
{
int temp = dfsgetzhongxin(q[x][i]);
g[x]+=temp;
f[x] = max(temp,f[x]);
}
}
f[x] = max(n-g[x],f[x]);
return g[x];
}
void dfsgetjl(int x,int id)
{
vis[x]=1;
flag+=id;
for(int i=0;i<q[x].size();i++)
{
if(!vis[q[x][i]])
{
dfsgetjl(q[x][i],id+1);
}
}
return;
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin>>n;
init(n);
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
q[u].push_back(v);
q[v].push_back(u);
}
dfsgetzhongxin(1);
int mmin = 1e9,x;
for(int i=1;i<=n;i++)
{
if(f[i]<mmin)
{
x=i;
mmin = f[i];
}
}
memset(vis,0,sizeof(vis));
dfsgetjl(x,0);
cout<<x<<" "<<flag<<endl;
return 0;
}