#include "traffic.h"
#include <iostream>
#include <vector>
using namespace std;
vector<int> ADJ[1000010];
int maxSubtree[1000010];
int subtreeSize[1000010];
int notSubtree[1000010];
int p[1000010];
void dfs(int node, int parent) {
for (int i = 0; i < ADJ[node].size(); i++) {
if(ADJ[node][i] == parent) continue;
dfs(ADJ[node][i], node);
}
if(node == 0) return;
subtreeSize[parent] += subtreeSize[node] + p[node];
maxSubtree[parent] = max(maxSubtree[parent], subtreeSize[node] + p[node]);
notSubtree[parent] -= subtreeSize[node] + p[node];
}
int LocateCentre(int N, int pp[], int S[], int D[]) {
int total = 0;
for(int i = 0; i < N; i++) {
p[i] = pp[i];
total += pp[i];
ADJ[D[i]].push_back(S[i]);
ADJ[S[i]].push_back(D[i]);
}
for(int i = 0; i < N; i++) {
notSubtree[i] = total-pp[i];
}
dfs(0,0);
int bestNode = 0;
int bestMax = 2000000000;
for(int i = 0; i < N; i++) {
if (max(maxSubtree[i],notSubtree[i]) < bestMax) {
bestMax = max(maxSubtree[i],notSubtree[i]);
bestNode = i;
}
}
return bestNode;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |