Submission #1215320

#TimeUsernameProblemLanguageResultExecution timeMemory
1215320nrg_studioVillage (BOI20_village)C++20
100 / 100
63 ms14784 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define pii pair<int,int> #define f first #define s second #define chmin(a, b) a = min(a,b) #define chmax(a, b) a = max(a,b) #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define F0R(i, a) for (int i = 0; i < (a); i++) #define all(x) x.begin(),x.end() #define vec vector const int MAX_N = 1e5; vec<int> adj[MAX_N]; int n; namespace MAXIMUM { int sz[MAX_N]; int to[MAX_N]; ll ans = 0; int get_size(int cur, int par=-1) { sz[cur] = 1; for (int x : adj[cur]) { if (x!=par) { sz[cur] += get_size(x,cur); } } return sz[cur]; } int get_cent(int cur, int par=-1) { for (int x : adj[cur]) { if (x!=par) { if (sz[x]*2>n) {return get_cent(x,cur);} } } return cur; } ll dep_sum(int cur, int par=-1, int dep=0) { ll ret = dep*2; for (int x : adj[cur]) { if (x!=par) { ret += dep_sum(x,cur,dep+1); } } return ret; } vec<int> ord; void dfs(int cur, int par=-1) { ord.pb(cur); for (int x : adj[cur]) { if (x!=par) {dfs(x,cur);} } } void solve() { int cent = get_cent(0,get_size(0)); get_size(cent); ans = dep_sum(cent); dfs(cent); for (int i=0;i<n;i++) {to[ord[i]] = ord[(i+n/2)%n];} } } namespace MINIMUM { int to[MAX_N], ans = 0; void dfs(int cur, int par=-1) { int last = cur; for (int x : adj[cur]) { if (x!=par) { dfs(x,cur); if (to[x]==-1) { to[last] = x; ans += 2; last = x; } } } if (last!=cur) {to[last] = cur;} else if (cur==0) { to[0] = to[adj[cur][0]]; to[adj[cur][0]] = 0; ans += 2; } } void solve() { memset(to,-1,sizeof(to)); dfs(0); } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i=0;i<n-1;i++) { int a, b; cin >> a >> b; adj[--a].pb(--b); adj[b].pb(a); } MINIMUM::solve(); MAXIMUM::solve(); cout << MINIMUM::ans << ' ' << MAXIMUM::ans << '\n'; for (int i=0;i<n;i++) {cout << MINIMUM::to[i]+1 << ' ';} cout << '\n'; for (int i=0;i<n;i++) {cout << MAXIMUM::to[i]+1 << ' ';} }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...