Submission #1160518

#TimeUsernameProblemLanguageResultExecution timeMemory
1160518lance0Village (BOI20_village)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<vector<int>> graph(n); for (int i = 0; i < n-1; i++) { int x,y; cin >> x >> y; graph[x-1].push_back(y-1); graph[y-1].push_back(x-1); } //BFS with delimiter for depth tracking //we always root at 0 bool vis[n] = {}; int depth[n] = {}; queue<int> bfs; stack<int> rev_bfs; bfs.push(0); bfs.push(-1); vis[0] = true; int curr_depth = 0; while(!bfs.empty()) { int x = bfs.front(); bfs.pop(); rev_bfs.push(x); if (x == -1) { if (!bfs.empty()) { bfs.push(-1); } curr_depth++; } else { for (int i = 0; i < graph[x].size(); i++) { if (vis[graph[x][i]] == false) { vis[graph[x][i]] = true; bfs.push(graph[x][i]); } } depth[x] = curr_depth; } } for (int i = 0; i < n; i++) { vis[i] = false; } int arr[n] = {}; for (int i = 0; i < n; i++) { arr[i] = i; } int min = 0; while (!rev_bfs.empty()) { int x = rev_bfs.top(); rev_bfs.pop(); if (vis[x] == false) { int parent = 0; for (int i = 0; i < graph[x].size(); i++) { if (depth[graph[x][i]] < depth[x]) { parent = graph[x][i]; } } vector<int> shift; shift.push_back(parent); vis[parent] = true; for (int i = 0; i < graph[parent].size(); i++) { if (depth[graph[parent][i]] > depth[parent] and vis[graph[parent][i]] == false) { shift.push_back(graph[parent][i]); vis[graph[parent][i]] = true; } } for (int i = 0; i < shift.size(); i++) { arr[shift[i]] = shift[(i+1) % shift.size()]; } min += 2*(shift.size()-1); if (shift.size() == 1) { vis[parent] = false; } } } //edge case checker if (arr[0] == 0) { arr[0] = arr[graph[0][0]]; arr[graph[0][0]] = 0; min += 2; } cout << min << " " << min << '\n'; for (int i = 0; i < n; i++) { cout << arr[i]+1 << " "; } cout << '\n'; for (int i = 0; i < n; i++) { cout << arr[i]+1 << " "; } cout << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...