(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

Submission #339608

#TimeUsernameProblemLanguageResultExecution timeMemory
339608TheYellowFlashTraffic (IOI10_traffic)C++17
100 / 100
1120 ms151604 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; 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] = max(ans[edge], sum - subtree[edge]); } int LocateCentre(int N, int pp[], int S[], int D[]) { ans.resize(N); 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 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...