Submission #1189159

#TimeUsernameProblemLanguageResultExecution timeMemory
1189159lopkusPapričice (COCI20_papricice)C++20
50 / 110
1095 ms15484 KiB
#include <bits/stdc++.h> void solve() { int n; std::cin >> n; std::vector<std::vector<int>> adj(n + 1); std::vector<std::array<int, 2>> edg; for(int i = 1; i < n; i++) { int u, v; std::cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); edg.push_back({u, v}); } std::vector<int> sub_tree(n + 1, 1); std::vector<int> in(n + 1), out(n + 1); int t = 0; std::function<void(int, int)> dfs = [&] (int v, int p) { in[v] = t++; for(auto u : adj[v]) { if(u == p) { continue; } dfs(u, v); sub_tree[v] += sub_tree[u]; } }; dfs(1, 0); for(int i = 1; i <= n; i++) { out[i] = in[i] + sub_tree[i] - 1; } std::function<int(int, int)> in_subtree = [&] (int u, int v) { return in[u] <= in[v] && out[u] >= out[v]; }; int ans = n + 1; for(int u = 1; u <= n; u++) { for(int v = u + 1; v <= n; v++) { if(in_subtree(u, v)) { int A = sub_tree[u] - sub_tree[v]; int B = sub_tree[v]; int C = n - sub_tree[u]; ans = std::min(ans, std::max({A, B, C}) - std::min({A, B, C})); continue; } if(in_subtree(v, u)) { int A = sub_tree[v] - sub_tree[u]; int B = sub_tree[u]; int C = n - sub_tree[v]; ans = std::min(ans, std::max({A, B, C}) - std::min({A, B, C})); continue; } int A = sub_tree[u]; int B = sub_tree[v]; int C = n - (A + B); ans = std::min(ans, std::max({A, B, C}) - std::min({A, B, C})); } } std::cout << ans; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t = 1; //std::cin >> t; while (t--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...