Submission #1175288

#TimeUsernameProblemLanguageResultExecution timeMemory
1175288vahagngTraffic (IOI10_traffic)C++20
100 / 100
434 ms153100 KiB
#include "traffic.h"
#include <bits/stdc++.h>
using namespace std;

vector<int>adj[1000010], a, sz;

long long sum;

void dfs(int node, int parent){
   sz[node] = a[node];
   for(auto i : adj[node]){
      if(i == parent) continue;
      dfs(i, node);
      sz[node] += sz[i];
   }
}

int cent(int node, int parent){
   for(auto i : adj[node]){
      if(i == parent) continue;
      if(2ll*sz[i] > sum) return cent(i, node);
   }
   return node;
}

int LocateCentre(int N, int pp[], int S[], int D[]) {
   a.resize(N);
   sz.resize(N);
   sum = 0;
   for(int i = 0; i < N; i++){
      a[i] = pp[i];
      sum += a[i];
   }
   for(int i = 0; i < N-1; i++){
      adj[S[i]].push_back(D[i]);
      adj[D[i]].push_back(S[i]);
   }
   dfs(0, -1);
   return cent(0, -1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...