Submission #967500

#TimeUsernameProblemLanguageResultExecution timeMemory
967500boyliguanhanFireworks (APIO16_fireworks)C++17
100 / 100
397 ms37972 KiB
#include<bits/stdc++.h>
using namespace std;
#define N 5<<17
#define pop(X) rt[X]=merge(ch[rt[X]][0],ch[rt[X]][1])
#define int long long
int deg[N],P[N],C[N],rt[N],ch[N][2],v[N],CC;
mt19937 rng(9234623);
int merge(int a,int b){
    if(!a+!b)
        return a+b;
    if(v[a]<v[b])
        swap(a,b);
    int x=rng()%2;
    ch[a][x]=merge(ch[a][x],b);
    return a;
}
signed main(){
    cin.tie(0)->sync_with_stdio(0);
    int n,m,ans=0;
    cin>>n>>m;
    for(int i=2;i<=n+m;i++)
        cin>>P[i]>>C[i],deg[P[i]]++,ans+=C[i];
    for(int i=n+m;i>1;i--){
        int l=0,r=0;
        if(deg[i]){
            while(--deg[i])
                pop(i);
            r=v[rt[i]];
            pop(i);
            l=v[rt[i]];
            pop(i);
        }
        v[++CC]=l+C[i],v[++CC]=r+C[i];
        rt[i]=merge(rt[i],merge(CC,CC-1));
        rt[P[i]]=merge(rt[P[i]],rt[i]);
    }
    while(deg[1]--)
        pop(1);
    while(rt[1])
        ans-=v[rt[1]],pop(1);
    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...