Submission #1249286

#TimeUsernameProblemLanguageResultExecution timeMemory
1249286kunzaZa183Traffic (IOI10_traffic)C++20
100 / 100
3486 ms231328 KiB
#include "traffic.h" #include <bits/stdc++.h> #include <numeric> using namespace std; using ll = long long; vector<vector<int>> adj; const int mn = 1e6; ll stree[mn] = {}; multiset<ll> msi; int *pp2; ll tot; ll mini; int ans; void dfs(int cur, int par) { stree[cur] = pp2[cur]; for (auto a : adj[cur]) if (a != par) { dfs(a, cur); stree[cur] += stree[a]; msi.insert(stree[a]); } }; void fvvi2(int cur, int par) { if (*msi.rbegin() < mini) { ans = cur; mini = *msi.rbegin(); } for (auto a : adj[cur]) { if (a != par) { msi.erase(msi.find(stree[a])); msi.insert(tot - stree[a]); fvvi2(a, cur); msi.insert(stree[a]); msi.erase(msi.find((tot - stree[a]))); } } }; int LocateCentre(int N, int pp[], int S[], int D[]) { if (N == 1) return 0; adj.resize(N); pp2 = pp; for (int i = 0; i < N - 1; i++) { adj[S[i]].push_back(D[i]), adj[D[i]].push_back(S[i]); } dfs(0, 0); tot = accumulate(pp, pp + N, 0ll); mini = *msi.rbegin(); ans = 0; fvvi2(0, 0); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...