Submission #1194358

#TimeUsernameProblemLanguageResultExecution timeMemory
1194358SonicMLTraffic (IOI10_traffic)C++17
100 / 100
891 ms157020 KiB
#include <vector>
#include "traffic.h"

using namespace std;

int const INF = 2e9+1;

int const NMAX = 1e6;
int val[1 + NMAX];
int ans[1 + NMAX];
vector <int> g[1 + NMAX];

int total;
int sub[1 + NMAX];

void DFS(int node, int parent) {
 
  ans[node] = 0;	
  sub[node] = val[node];
  for(int i = 0;i < g[node].size();i++) {
    int to = g[node][i]; 
    if(to != parent) {
      DFS(to, node);
      ans[node] = max(ans[node], sub[to]);
      sub[node] += sub[to];
    }
  }
  ans[node] = max(ans[node], total - sub[node]);
}

int LocateCentre(int N, int pp[], int S[], int D[]) {
  int n;
  n = N;
  for(int i = 1;i <= n;i++) {
    val[i] = pp[i-1];
    total += val[i];
  }
  for(int i = 1;i < n;i++) {
    int a, b;
    a = S[i-1] + 1; 
    b = D[i-1] + 1;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  DFS(1, 1);
  int sol = INF, best = 0;
  for(int i = 1;i <= n;i++) {
    if(ans[i] < sol) {
      best = i;
      sol = ans[i];
    }
  }
  return (best-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...