Submission #495670

#TimeUsernameProblemLanguageResultExecution timeMemory
495670AlperenTPapričice (COCI20_papricice)C++17
0 / 110
3 ms4940 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5, INF = 1e9 + 5; int n, a, b, cnt[N], ans = INF, x, y, z; set<int> st; vector<int> tree[N]; void dfs(int v, int p = 0){ cnt[v] = 1; for(auto e : tree[v]){ if(e != p){ dfs(e, v); cnt[v] += cnt[e]; } } } void solve(int v, int p = 0){ for(auto e : tree[v]){ if(e != p) solve(e, v); } st.insert(cnt[v]); x = n - cnt[v]; auto it = st.upper_bound(cnt[v] / 2); if(it != st.end()){ y = *it, z = cnt[v] - y; ans = min(ans, max({x, y, z}) - min({x, y, z})); } if(it != st.begin()){ y = *prev(it), z = cnt[v] - y; ans = min(ans, max({x, y, z}) - min({x, y, z})); } } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin >> n; for(int i = 0; i < n - 1; i++){ cin >> a >> b; tree[a].push_back(b); tree[b].push_back(a); } dfs(1); solve(1); cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...