#include <bits/stdc++.h>
using namespace std;
//~ #define int int64_t
#define pb push_back
#define emb emplace_back
#define fr first
#define sc second
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define N 100000
#define inf 2e18
typedef pair<int,int> ii;
int n,d[N+5],len[2],h[2][N+5];
vector<int> g[N+5],v;
void dfs1(int x,int p){
h[0][x]=x;
for(int i:g[x]){
if(i==p) continue;
dfs1(i,x);
if(h[0][i]==i){
h[0][i]=h[0][x];
h[0][x]=i;
len[0]+=2;
}
}
}
void dfs2(int x,int p){
d[x]=1;
for(int i:g[x]){
if(i!=p){
dfs2(i,x);
d[x]+=d[i];
}
}
}
int cntrd(int x,int p){
for(int i:g[x]){
if(i==p) continue;
if(2*d[i]>n) return cntrd(i,x);
}
return x;
}
void dfs3(int x,int p){
d[x]=1;
for(int i:g[x]){
if(i!=p){
dfs3(i,x);
d[x]+=d[i];
}
}
if(d[x]!=n)
len[1]+=2*d[x];
v.pb(x);
}
void solve(){
cin >> n;
for(int i=1;i<n;i++){
int x,y;
cin >> x >> y;
g[x].pb(y);
g[y].pb(x);
}
dfs1(1,0);
if(h[0][1]==1){
h[0][1]=h[0][g[1][0]];
h[0][g[1][0]]=1;
len[0]+=2;
}
dfs2(1,0);
int root=cntrd(1,0);
dfs3(root,0);
for(int i=0;i<n;i++)
h[1][v[i]]=v[(i+(n+1)/2)%n];
cout << len[0] sp len[1] << "\n";
for(int i=1;i<=n;i++)
cout << h[0][i] << " ";
cout << "\n";
for(int i=1;i<=n;i++)
cout << h[1][i] << " ";
cout << "\n";
}
int32_t main(){
cout << fixed << setprecision(0);
ios_base::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
int test=1;
//~ cin >> test;
while(test--){
solve();
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |