# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
310176 | 2020-10-06T07:02:43 Z | shihs | Traffic (IOI10_traffic) | C++11 | 0 ms | 0 KB |
#include "traffic.h" #include <bits/stdc++.h> using namespace std; const int MX = 1e6; int totalFans = 0; vector<int> roads[MX], cityFans(MX), congestionOfCity(MX), accFans2City(MX); void dfs (int node, int parent) { for (auto x: roads[node]) { if (x == parent) continue; dfs(x, node); accFans2City[node] += accFans2City[x]; congestionOfCity[node] = max(congestionOfCity[node], accFans2City[x]); } congestionOfCity[node] = max(congestionOfCity[node], totalFans - accFans2City[node] - cityFans[node]); accFans2City[node] += cityFans[node]; } int LocateCentre (int n, int p[], int d[], int s[]) { for (int i = 0; i < n; i++) { totalFans += p[i]; cityFans[i] = p[i]; } for (int i = 0; i < n - 1; i++) { roads[s[i]].push_back(d[i]); roads[d[i]].push_back(s[i]); } dfs(0, -1); int minIdx = 0; for (int i = 1; i < n; ++i) { if (congestionsOfCity[i]<congestionOfCity[minIdx]) { minIdx = i; } } return minIdx; }