Submission #1151668

#TimeUsernameProblemLanguageResultExecution timeMemory
1151668QuantumK9Village (BOI20_village)C++17
50 / 100
76 ms18748 KiB
/* * @author Kian Chua * @date 01/2025 * */ #include <bits/stdc++.h> #define ll long long #define pb push_back #define mp make_pair #define f first #define s second using namespace std; int n; vector<vector<int> > connect; vector<bool> explored; vector<int> parent; priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq; ll swaps_mx = 0; vector<int> sz; vector<int> preorder; // returns depth of node (leaf nodes have depth=0) int dfs(int i, int p) { explored[i] = true; parent[i] = p; preorder.pb(i); int sz_i = 1; int depth = -1; for (int j : connect[i]) { if (!explored[j]) { depth = max(depth, dfs(j, i)); sz_i += sz[j]; } } sz[i] = sz_i; swaps_mx += min(sz_i, n-sz_i); depth++; pq.push(mp(depth, i)); return depth; } void solve() { cin >> n; connect.resize(n); parent.resize(n); explored.resize(n, false); sz.resize(n, 0); for (int i = 0; i < n-1; i++) { int a, b; cin >> a >> b; a--; b--; connect[a].pb(b); connect[b].pb(a); } dfs(0, -1); vector<int> smallest(n); for (int i = 0; i < n; i++) { smallest[i] = i+1; } int swaps = 0; while (!pq.empty()) { int cur = pq.top().s; pq.pop(); if (!explored[cur]) { continue; } if (cur == 0) { // special handling swaps++; swap(smallest[cur], smallest[connect[cur][0]]); continue; } explored[cur] = false; explored[parent[cur]] = false; // swap with parent swaps++; swap(smallest[cur], smallest[parent[cur]]); } vector<int> largest(n); for (int i = 0; i < n; i++) { largest[i] = preorder[(i+(n/2))%n] + 1; } cout << 2*swaps << " " << 2*swaps_mx << endl; for (int i : smallest) { cout << i << " "; } cout << endl; for (int i : largest) { cout << i << " "; } cout << endl; return; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; //cin >> t; while(t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...