Submission #339613

#TimeUsernameProblemLanguageResultExecution timeMemory
339613TheYellowFlashTraffic (IOI10_traffic)C++17
100 / 100
1283 ms192604 KiB
#include "traffic.h" #include <bits/stdc++.h> using namespace std; #define ll int64_t #define all(x) x.begin(), x.end() int LocateCentre(int N, int pp[], int S[], int D[]) { vector<vector<int>> adj(N); vector<ll> ans(N); vector<ll> subtree(N, 0); ll sum = 0; for(int i = 0; i < N-1; ++i){ adj[S[i]].push_back(D[i]); adj[D[i]].push_back(S[i]); } for(int i = 0; i < N; ++i){ subtree[i] += pp[i]; sum += pp[i]; } auto dfs = [&](auto self, int edge, int prev) -> void{ for(auto& e : adj[edge]){ if(e == prev) continue; self(self, e, edge); subtree[edge] += subtree[e]; ans[edge] = max(ans[edge], subtree[e]); } ans[edge] = max(ans[edge], sum - subtree[edge]); }; dfs(dfs, 0, 0); return min_element(all(ans)) - ans.begin(); } // subtree[i] originally == node weight // Increment it each time by weights of its subnodes // Answer could be max(ans, sum(of all weights) - 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...