Submission #1295013

#TimeUsernameProblemLanguageResultExecution timeMemory
1295013dooweyFireworks (APIO16_fireworks)C++20
7 / 100
3 ms716 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

#define fi first
#define se second
#define mp make_pair
#define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

const int N = (int)2e5 + 10;
vector<pii> T[N];

vector<ll> que[N];
ll low[N];
void dfs(int u){
    if(T[u].empty()){
        que[u] = {0ll,0ll};
        return;
    }
    for(auto x : T[u]){
        dfs(x.fi);
        for(auto y : que[x.fi]){
            que[u].push_back(y + x.se);
        }
        low[u] += low[x.fi];
    }
    sort(que[u].begin(), que[u].end());
    int m = que[u].size() / 2;
    ll lf = que[u][m - 1], rf = que[u][m];
    for(auto x : T[u]){
        vector<ll> qu;
        for(auto y : que[x.fi]){
            qu.push_back(y + x.se);
        }
        if(qu[1] < rf){
            low[u] += rf - qu[1];
        }
        else if(qu[0] > rf){
            low[u] += qu[0] - rf;
        }
    }
    que[u] = {lf, rf};
}

int main(){
    fastIO;
    int n, m;
    cin >> n >> m;
    for(int i = 2; i <= n + m ; i ++ ){
        int p, c;
        cin >> p >> c;
        T[p].push_back(mp(i, c));
    }
    dfs(1);
    cout << low[1] << "\n";
    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...