Submission #1306372

#TimeUsernameProblemLanguageResultExecution timeMemory
1306372HasanV11010238Fireworks (APIO16_fireworks)C++20
100 / 100
358 ms96552 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<vector<vector<ll>>> v;
vector<priority_queue<ll>> pr;
ll ans = 0, n, fi;
void dfs(int x, ll co){
    if (v[x].size() == 0){
        pr[x].push(co);
        pr[x].push(co);
        ans -= co;
        return;
    }
    int cnt = 0;
    for (auto el : v[x]){
        cnt++;
        dfs(el[0], el[1]);
        if (pr[el[0]].size() > pr[x].size()){
            swap(pr[el[0]], pr[x]);
        }
        while (!pr[el[0]].empty()){
            pr[x].push(pr[el[0]].top());
            pr[el[0]].pop();
        }
    }
    int wh = 0;
    if (x != 1) wh++;
    for (int i = wh; i < cnt; i++){
        ans += pr[x].top();
        pr[x].pop();
    }
    if (x != 1){
        ll fi = pr[x].top();
        pr[x].pop();
        ll se = pr[x].top();
        pr[x].pop();
        pr[x].push(fi + co);
        pr[x].push(se + co);
        ans -= co;
    }
}
int main(){
    ll a, b;
    cin>>fi>>n;
    n += fi;
    v.assign(n + 1, vector<vector<ll>>());
    pr.assign(n + 1, priority_queue<ll>());
    for (int i = 2; i <= n; i++){
        cin>>a>>b;
        v[a].push_back({i, b});
    }
    dfs(1, 0);
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...