제출 #1326275

#제출 시각아이디문제언어결과실행 시간메모리
1326275keremVillage (BOI20_village)C++20
75 / 100
58 ms14696 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...