Submission #1248260

#TimeUsernameProblemLanguageResultExecution timeMemory
1248260pastaVillage (BOI20_village)C++20
100 / 100
91 ms39612 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pii; #define pb push_back #define F first #define S second //#define int long long const int maxn = 1e6 + 10; const int LOG = 21; const int mod = 1e9 + 7; const int inf = 1e9 + 10; ll n, ret, ans, mn[maxn], sub[maxn], h[maxn], st[maxn]; vector<ll> G[maxn], res; int clo = 0; int dfs_sz(int v, int p) { sub[v] = 1; for (int u : G[v]) { if (u == p) continue; sub[v] += dfs_sz(u, v); } return sub[v]; } int centroid(int v, int sz, int p) { for (int u : G[v]) { if (u == p) continue; if (sz < sub[u] * 2) return centroid(u, sz, v); } return v; } void dfs(int v, int p) { st[v] = clo++; res.pb(v); for (int u : G[v]) { if (u == p) continue; h[u] = h[v] + 1; ret += h[u]; dfs(u, v); } } void dfs2(int v = 1, int p = 0){ mn[v] = v; for (int u : G[v]) { if (u == p) continue; dfs2(u, v); } if (mn[v] == v) { ans += 2; if (p > 0) { swap(mn[v], mn[p]); } else { swap(mn[v], mn[G[v][0]]); } } } int main() { cin >> n; for (int i = 1; i <= n - 1; i++) { int v, u; cin >> v >> u; G[v].pb(u); G[u].pb(v); } int cen = centroid(1, dfs_sz(1, 0), 0); dfs(cen, 0); dfs2(); cout << ans << ' ' << ret * 2 << '\n'; for (int i = 1; i <= n; i++) cout << mn[i] << ' '; cout << '\n'; for (int i = 1; i <= n; i++) { cout << res[(st[i] + n / 2) % n] << ' '; } cout << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...