Submission #120504

#TimeUsernameProblemLanguageResultExecution timeMemory
120504popovicirobertUntitled (POI11_ins)C++14
100 / 100
1977 ms131072 KiB
#include <bits/stdc++.h> #define ll long long #define ull unsigned long long #define lsb(x) (x & (-x)) using namespace std; const int MAXN = (int) 1e6; vector <int> g[MAXN + 1]; int down[MAXN + 1], sz[MAXN + 1]; void dfs(int nod, int par, ll &sum) { sz[nod] = 1; for(auto it : g[nod]) { if(it != par) { dfs(it, nod, sum); down[nod] = max(down[nod], down[it] + 1); sz[nod] += sz[it]; sum += sz[it]; } } } ll sol[MAXN + 1]; int n; void solve(int nod, int par, ll sum, int mx_down) { int mx = n - sz[nod]; multiset <int> mst; for(auto it : g[nod]) { if(it != par) { mx = max(mx, sz[it]); mst.insert(down[it]); } } if(mx <= (n - 1) - mx + 1) { if(mx < (n - 1) - mx + 1) { sol[nod] = 2LL * sum - max(mx_down, down[nod]); } else { if(mx == n - sz[nod]) { sol[nod] = 2LL * sum - mx_down; } else { for(auto it : g[nod]) { if(it != par && sz[it] == mx) { sol[nod] = 2LL * sum - (down[it] + 1); } } } } } else { sol[nod] = -1; } for(auto it : g[nod]) { if(it != par) { mst.erase(mst.find(down[it])); int cur = -2 * MAXN; if(mst.size()) { cur = *prev(mst.end()); } solve(it, nod, sum - 2LL * sz[it] + n, max(mx_down + 1, cur + 2)); mst.insert(down[it]); } } } int main() { //ifstream cin("A.in"); //ofstream cout("A.out"); int i; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n; for(i = 1; i < n; i++) { int x, y; cin >> x >> y; g[x].push_back(y); g[y].push_back(x); } ll sum = 0; dfs(1, 0, sum); solve(1, 0, sum, 0); for(i = 1; i <= n; i++) { cout << sol[i] << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...