제출 #1280073

#제출 시각아이디문제언어결과실행 시간메모리
1280073MisterReaperVillage (BOI20_village)C++20
100 / 100
56 ms27964 KiB
// File village.cpp created on 16.10.2025 at 20:35:16 #include <bits/stdc++.h> using i64 = long long; #ifdef DEBUG #include "/home/ahmetalp/Desktop/Workplace/debug.h" #else #define debug(...) void(23) #endif constexpr int max_N = int(1E5) + 5; int N; std::vector<int> adj[max_N]; i64 ans1 = 0; int go[max_N]; int ord1[max_N]; void dfs1(int v, int pr) { for (auto u : adj[v]) { if (u == pr) { continue; } dfs1(u, v); if (go[u] == u) { std::swap(go[u], go[v]); ans1 += 2; } } if (pr == -1 && go[v] == v) { std::swap(go[v], go[adj[v][0]]); ans1 += 2; } } int siz[max_N]; void dfs2(int v, int pr) { siz[v] = 1; for (auto u : adj[v]) { if (u == pr) { continue; } dfs2(u, v); siz[v] += siz[u]; } } int tin[max_N]; int tord[max_N]; int ord2[max_N]; int tim = 0; void dfs3(int v, int pr) { tin[v] = tim; tord[tim++] = v; for (auto u : adj[v]) { if (u == pr) { continue; } dfs3(u, v); } } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cin >> N; for (int i = 1; i < N; ++i) { int A, B; std::cin >> A >> B; --A, --B; adj[A].emplace_back(B); adj[B].emplace_back(A); } for (int i = 0; i < N; ++i) { go[i] = i; } dfs1(0, -1); for (int i = 0; i < N; ++i) { ord1[i] = go[i]; } dfs2(0, -1); i64 ans2 = 0; for (int i = 1; i < N; ++i) { ans2 += std::min(siz[i], N - siz[i]) * 2; } int centro = 0; while (true) { int ncentro = -1; for (auto u : adj[centro]) { if (siz[u] > siz[centro]) { continue; } if (siz[u] * 2 > N) { ncentro = u; break; } } if (ncentro == -1) { break; } centro = ncentro; } debug(centro); dfs3(centro, -1); for (int i = 0; i < N; ++i) { ord2[i] = tord[(tin[i] + N / 2) % N]; } std::cout << ans1 << ' ' << ans2 << '\n'; for (int i = 0; i < N; ++i) { std::cout << ord1[i] + 1 << " \n"[i == N - 1]; } for (int i = 0; i < N; ++i) { std::cout << ord2[i] + 1 << " \n"[i == N - 1]; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...