Submission #1312628

#TimeUsernameProblemLanguageResultExecution timeMemory
1312628niwradTraffic (IOI10_traffic)C++20
100 / 100
545 ms152904 KiB
#include "traffic.h"
#include <bits/stdc++.h>

using namespace std;
vector<vector<int>> graph;
vector<int> sz;
int total = 0;
vector<int> vec;
int dfs(int node, int prev) {
   int mx = 0;
   int sum = vec[node];
   for (auto next : graph[node]) {
      if (next != prev) {
         int val = dfs(next, node);
         mx = max(mx, val);
         sum += val;
      }
   }
   mx = max(total - sum, mx);
   sz[node] = mx;
   return sum;
}



int LocateCentre(int N, int pp[], int S[], int D[]) {
   graph.resize(N);
   sz.resize(N);
   vec.resize(N);
   for (int i = 0; i < N; i++) {
      vec[i] = pp[i];
      total += pp[i];
   }
   for (int i = 0; i < N - 1; i++) {
      graph[S[i]].push_back(D[i]);
      graph[D[i]].push_back(S[i]);
   }
   dfs(0, -1);
   int ans = -1;
   int num = 2e9 + 2;
   for (int i = 0; i < N; i++) {
      if (sz[i] < num) {
         num = sz[i];
         ans = i;
      }
   }
   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...