Submission #336178

#TimeUsernameProblemLanguageResultExecution timeMemory
336178rqiTraffic (IOI10_traffic)C++14
100 / 100
1144 ms149100 KiB
#include <bits/stdc++.h>
using namespace std;

typedef int ll;
typedef vector<int> vi;


#define pb push_back
#define mp make_pair
#define f first
#define s second

const ll INF = int(2e9)+7;
const int mx = 1000005;
vi adj[mx];
ll sub[mx];
ll sum = 0;
pair<ll, int> ans = mp(INF, -1);

void genSub(int node, int prv = -1){
	ll val = 0;
	for(auto u: adj[node]){
		if(u == prv) continue;
		genSub(u, node);
		sub[node]+=sub[u];
		val = max(val, sub[u]);
	}
	val = max(val, sum-sub[node]);
	ans = min(ans, mp(val, node));
}

int LocateCentre(int N, int P[], int S[], int D[]) {
	for(int i = 0; i < N-1; i++){
		adj[S[i]].pb(D[i]);
		adj[D[i]].pb(S[i]);
	}
	for(int i = 0; i < N; i++){
		sub[i]+=P[i];
		sum+=P[i];
	}
	genSub(0);
	return ans.s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...