Submission #955495

#TimeUsernameProblemLanguageResultExecution timeMemory
955495manhlinh1501Papričice (COCI20_papricice)C++17
50 / 110
1063 ms31488 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5; const int oo = 1e9; #define sz(a) (int)a.size() #define eb emplace_back using pii = pair<int, int>; int n; namespace arcv { int n; vector<int> adj[N]; int par[N]; int sz[N]; int st[N]; int en[N]; int tour[N]; int ans = oo; int times = 0; multiset<int> S; void calc_sz(int u, int p) { par[u] = p; sz[u] = 1; for(int v : adj[u]) { if(v == p) continue; calc_sz(v, u); sz[u] += sz[v]; } } int get(int a, int b, int c) { return max({a, b, c}) - min({a, b, c}); } void DFS(int u, int p) { auto it = S.lower_bound((n - sz[u]) / 2); if(it != S.end()) ans = min(ans, get(sz[u], *it, n - sz[u] - (*it))); if(it != S.begin()) --it; if(it != S.end()) ans = min(ans, get(sz[u], *it, n - sz[u] - (*it))); st[u] = ++times; tour[times] = u; for(int v : adj[u]) { if(v == p) continue; DFS(v, u); } S.emplace(sz[u]); en[u] = times; } void solution() { cin >> n; for(int i = 1; i < n; i++) { int u, v; cin >> u >> v; adj[u].eb(v); adj[v].eb(u); } calc_sz(1, 0); DFS(1, 0); for(int i = 1; i <= n; i++) { int x = i; while(x) { ans = min(ans, get(sz[i], sz[x] - sz[i], n - sz[x])); x = par[x]; } } cout << ans; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); arcv::solution(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...