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>
//#include <ext/pb_ds/tree_policy.hpp>
//#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
//using namespace __gnu_pbds;
#define FOR(i,start,end) for(int i=start;i<(int)(end);i++)
#define FORE(i,start,end) for(int i=start;i<=(int)end;i++)
#define RFORE(i,start,end) for(int i = start; i>=end; i--)
#define all(a) a.begin(), a.end()
#define v vector
typedef long long ll;
typedef pair<int, int > pii;
//template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<class T> void minn(T &a, T b) { a = min(a, b); }
template<class T> void maxx(T &a, T b) { a = max(a, b); }
v<int> adj[1000000];
ll sum[1000000];
pair<ll, int> ans = {LLONG_MAX, -1};
ll solve(int x, int p, int pp[], ll t){
ll mymax = 0;
sum[x] = pp[x];
for(auto c : adj[x]) if(c!=p){
ll csum = solve(c,x,pp,t);
maxx(mymax, csum);
sum[x] += csum;
}
maxx(mymax, t-sum[x]);
minn(ans, {mymax, x});
return sum[x];
}
int LocateCentre(int N, int pp[], int S[], int D[]) {
ll total = 0;
FOR(i,0,N){
adj[S[i]].push_back(D[i]);
adj[D[i]].push_back(S[i]);
total += pp[i];
}
solve(0,-1, pp, total);
return ans.second;
}
/*
0-n-1
pp is number
S-D
*/
# | 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... |