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<bits/stdc++.h>
#include "traffic.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 1e6 + 15;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
#define pb push_back
#define sz(x) (int) x.size()
#define fr first
#define sc second
#define mp make_pair
#define all(x) x.begin(), x.end()
int fans = 0;
vector<int> adj[MAX], child(MAX), cong(MAX), fan(MAX);
//child keeps number of children, cong worst congestion, fan number of fans in ith city
void dfs(int x, int p){
for(auto v : adj[x]){
if(v == p) continue;
dfs(v, x);
child[x] += child[v];
cong[x] = max(cong[x], child[v]); //maximum congestion
}
cong[x] = max(cong[x], fans - cong[x] - fan[x]); //worst between children and others (that come through parent)
child[x] += fan[x]; //add to children for next node processing
}
int LocateCentre(int n, int p[], int s[], int d[]){
for(int i = 0; i < n; i++){
fans += p[i];
fan[i] = p[i];
}
for(int i = 0; i < n - 1; i++){
adj[s[i]].pb(d[i]);
adj[d[i]].pb(s[i]);
}
dfs(0, -1);
int id, sm = INF;
for(int i = 0; i < n; i++){ //want city with best worst congestion
if(sm > cong[i]){
id = i, sm = cong[i];
}
}
return id;
}
/*int main(){
setIO();
int P[] = {10, 10, 10, 20, 20};
int S[] = {0, 1, 3, 4};
int D[] = {2, 2, 2, 3};
cout << LocateCentre(5, P, S, D) << '\n';
return 0;
}*/
Compilation message (stderr)
traffic.cpp: In function 'int LocateCentre(int, int*, int*, int*)':
traffic.cpp:58:12: warning: 'id' may be used uninitialized in this function [-Wmaybe-uninitialized]
58 | return id;
| ^~
# | 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... |