Submission #1207686

#TimeUsernameProblemLanguageResultExecution timeMemory
1207686vaneaTraffic (IOI10_traffic)C++20
100 / 100
455 ms160884 KiB
#include "traffic.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int mxN = 1e6+10;

ll dp[mxN], pop[mxN];
vector<int> adj[mxN];
ll sum = 0;
ll ans = 1e18, last = -1;

void dfs(int node, int p) {
    for(auto it : adj[node]) {
        if(it == p) continue;
        dfs(it, node);
        dp[node] += dp[it];
    }
    dp[node] += pop[node];
    ll mx = sum-dp[node];
    for(auto it : adj[node]) {
        if(it == p) continue;
        mx = max(mx, dp[it]);
    }
    if(mx < ans) {
        ans = mx;
        last = node;
    }
}

int LocateCentre(int n, int p[], int s[], int d[]) {
    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++) {
        sum += p[i];
        pop[i] = p[i];
    }
    dfs(0, -1);
    return last;
}
/*
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    int p[10], s[10], d[10];
    for(int i = 0; i < n; i++) {
        cin >> p[i];
    }
    for(int i = 0; i < n-1; i++) {
        cin >> s[i];
    }
    for(int i = 0; i < n-1; i++) {
        cin >> d[i];
    }
    cout << LocateCentre(n, p, s, d);
    return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...