Submission #339363

#TimeUsernameProblemLanguageResultExecution timeMemory
339363TheYellowFlashTraffic (IOI10_traffic)C++17
0 / 100
26 ms39532 KiB
#include "traffic.h" #include <bits/stdc++.h> using namespace std; #define ll int64_t #define all(x) x.begin(), x.end() const int mxN = 1e6+3; vector<int> adj[mxN]; vector<ll> ans(mxN, 0); vector<ll> subtree(mxN, 0); ll sum; void dfs(int edge, int prev){ for(auto& e: adj[edge]){ if(e == prev) continue; dfs(e, edge); subtree[edge] += subtree[e]; ans[edge] = max(ans[edge], subtree[e]); } ans[edge] = min(ans[edge], sum - ans[edge]); } int LocateCentre(int N, int pp[], int S[], int D[]) { 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]; } dfs(0, 0); return max_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...