Submission #590711

#TimeUsernameProblemLanguageResultExecution timeMemory
590711l_rehoTraffic (IOI10_traffic)C++14
100 / 100
1186 ms237324 KiB
#include "traffic.h" #include <bits/stdc++.h> using namespace std; vector<long long> st; vector<vector<int>> graph; vector<bool> visited; vector<int> parent; long long preprocess(int curr, int pp[]){ visited[curr] = true; vector<int> adj = graph[curr]; st[curr] = pp[curr]; for(int a : adj){ if(visited[a]) continue; parent[a] = curr; st[curr] += preprocess(a, pp); } return st[curr]; } int LocateCentre(int N, int pp[], int S[], int D[]) { visited.assign(N, 0); parent.assign(N, 0); st.assign(N, 0LL); graph.assign(N, vector<int>()); for(int i = 0; i < N-1; i++){ graph[S[i]].push_back(D[i]); graph[D[i]].push_back(S[i]); } preprocess(0, pp); // for(int i = 0; i < N; i++) cout<<"DEBUG-->"<<st[i]<<endl; long long mn = LLONG_MAX; int ans = -1; for(int i = 0; i < N; i++){ vector<int> adj = graph[i]; long long mx = -1; for(int a : adj){ if(a != parent[i]){ if(st[a] > mx) mx = st[a]; }else { // calcolo della congestione della strada che collega // i al parent long long cong = st[0] - st[i]; // cout<<i<<" "<<a<<" "<<cong<<endl; if(cong > mx) mx = cong; } } if(mx < mn) ans = i; mn = min(mn, mx); } 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...