调了30min愣是没调出来。。。
include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
const int N=5e4+100,INF=0x7ffffff;
vector<int>edge[N];
int n,minn=INF,rt,f[N],size[N],dep[N];
int getsize(int u,int fa,int sz){
size[u]=1;dep[u]=sz;
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i];
if(v==fa)continue;
size[u]+=getsize(v,u,sz+1);
}
return size[u];
}
void dp(int u,int fa){
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i];
if(v==fa)continue;
f[v]=f[u]+n-size[v]-size[v];
dp(v,u);
}
return;
}
int main(){
scanf("%d",&n);
int x,y;
for(int i=1;i<n;i++){
scanf("%d %d",&x,&y);
edge[x].push_back(y);
edge[y].push_back(x);
}
getsize(1,0,0);
for(int i=1;i<=n;i++){
f[1]+=dep[i];
}
dp(1,0);
for(int i=1;i<=n;i++){
if(f[i]<minn){
minn=f[i],rt=i;
}
}
printf("%d %d",rt,minn);
return 0;
}