This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "traffic.h"
#include <bits/stdc++.h>
using namespace std;
#define ll int64_t
#define all(x) x.begin(), x.end()
const int mxN = 1e6+3;
vector<int> adj[mxN];
vector<ll> ans;
vector<ll> subtree(mxN, 0);
ll sum;
void dfs(int edge, int prev){
for(auto& e: adj[edge]){
if(e == prev) continue;
dfs(e, edge);
subtree[edge] += subtree[e];
ans[edge] = max(ans[edge], subtree[e]);
}
ans[edge] = max(ans[edge], sum - subtree[edge]);
}
int LocateCentre(int N, int pp[], int S[], int D[]) {
ans.resize(N);
for(int i = 0; i < N-1; ++i){
adj[S[i]].push_back(D[i]);
adj[D[i]].push_back(S[i]);
}
for(int i = 0; i < N; ++i){
subtree[i] += pp[i];
sum += pp[i];
}
dfs(0, 0);
return min_element(all(ans)) - ans.begin();
}
// subtree[i] originally == node weight
// Increment it each time by weights of its subnodes
// Answer could be max(ans, sum(of all weights) - ans)
# | 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... |