只WA了这一个点,handmade的第一个数据。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+3;
vector<int>e[maxn];
int n,siz[maxn],rt,f[maxn],ans=0x3f3f3f3f,dfn[maxn],dfncnt=-1;
void dfs(int u,int fa,int dep){
siz[u]=1;
for(int v:e[u]){
if(v!=fa){
dfs(v,u,dep+1);
siz[u]+=siz[v];
}
}
f[1]+=dep;
}
void dfs1(int u,int fa){
for(int v:e[u]){
if(v!=fa){
f[v]=f[u]+siz[1]-2*siz[v];
dfs1 (v,u);
}
}
if(ans>f[u]){
ans=f[u];
rt=u;
}
}
void dfs2(int u,int fa,int dep){
dfn[++dfncnt]=u;
siz[u]=dep;
for(int v:e[u]){
if(v!=fa) dfs2(v,u,dep+1);
}
}
signed main(){
cin>>n;
for(int i=1,u,v;i<n;i++){
cin>>u>>v;
e[u].emplace_back(v);
e[v].emplace_back(u);
}
dfs(1,0,0);
dfs1(1,0);
dfs2(rt,0,0); dfn[++dfncnt]=rt;
for(int i=1;i<=n/2;i++){
cout<<dfn[i]<<' '<<dfn[i+n/2]<<'\n';
}
return 0;
}