Submission #1322778

#TimeUsernameProblemLanguageResultExecution timeMemory
1322778jahongirFireworks (APIO16_fireworks)C++20
0 / 100
13 ms19232 KiB
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define all(a) a.begin(),a.end()

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef unsigned long long ull;
typedef vector<int> vi;


const int mxn = 6e5+1;
vector<pii> g[mxn];
priority_queue<ll> pq[mxn];
ll val[mxn];

void dfs(int u = 1, int col = 0){
    
    int mx = 0;
    for(auto [v,c] : g[u]){
        dfs(v,c);
        if((int) pq[mx].size() < (int) pq[v].size())
            mx = v;
    }

    if(mx==0){
        pq[u].push(col);
        pq[u].push(col);
        val[u] = col;
        return;
    }

    pq[u].swap(pq[mx]);
    val[u] = val[mx];

    for(auto [v,c] : g[u]) if(v!=mx){
        while(!pq[v].empty()){
            pq[u].push(pq[v].top());
            pq[v].pop();
        }
        val[u] += val[v];
    }

    for(int i = 1; i < (int) g[u].size(); i++)
        pq[u].pop();

    val[u]+=col;
    auto x = pq[u].top();
    pq[u].pop();
    pq[u].pop();
    pq[u].push(x+col);
    pq[u].push(x+col);    
}


void solve(){
    int n,m; cin >> n >> m;
    for(int i = 2; i <= n+m; i++){
        int p,c; cin >> p >> c;
        g[p].emplace_back(pii{i,c});
    }

    dfs();
    
    pq[1].pop();
    while(!pq[1].empty()){
        val[1] -= pq[1].top(); pq[1].pop();
    }

    cout << val[1];
}

signed main(){
    cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    // cin >> t;
    while(t--){solve();}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...