Submission #1194291

#TimeUsernameProblemLanguageResultExecution timeMemory
1194291ackhavaFireworks (APIO16_fireworks)C++20
7 / 100
3 ms5004 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define REP(i,o,n) for(auto i=o;i<n;i++)
using namespace std;

pair<long long,pair<long long,long long>> dp[200100];

long long getval(pair<long long,pair<long long,long long>> f, long long x){
    if(f.se.se < x)return x+f.fi-f.se.se;
    if(f.se.fi < x)return f.fi;
    return f.se.fi+f.fi-x;
}

vector<long long> child[200100];
long long par[200100];

void dfs(long long node){
    if(!child[node].size()){
        dp[node]={0,{par[node],par[node]}};
        return;
    }
    vector<long long> v;
    for(auto i:child[node])dfs(i),v.pb(dp[i].se.fi),v.pb(dp[i].se.se);
    sort(v.begin(),v.end());
    dp[node].se = {v[child[node].size()-1],v[child[node].size()]};
    dp[node].fi = 0;
    for(auto i:child[node])dp[node].fi += getval(dp[i],dp[node].se.fi);
    dp[node].se.fi += par[node];
    dp[node].se.se += par[node];
}

signed main() {
    long long n,m;cin>>n>>m;
    REP(i,2,n+m+1){
        long long p;cin>>p;
        cin>>par[i];
        child[p].pb(i);
    }
    dfs(1);
    cout<<dp[1].fi;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...