Submission #1153029

#TimeUsernameProblemLanguageResultExecution timeMemory
1153029vladiliusFireworks (APIO16_fireworks)C++20
7 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
#define pb push_back
#define ff first
#define ss second

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, m; cin>>n>>m;
    int f = n + m;
    vector<ll> p(f + 1);
    vector<int> g[f + 1];
    for (int i = 2; i <= n; i++){
        int x, w; cin>>x>>w;
        g[x].pb(i);
        p[i] = p[x] + w;
    }
    vector<bool> d(f + 1);
    for (int i = 1; i <= n; i++) d[i] = 1;
    for (int i = n + 1; i <= f; i++){
        int x, w; cin>>x>>w;
        g[x].pb(i);
        p[i] = p[x] + w;
        if (x > n){
            d[i] = 1;
        }
    }
  
    vector<pll> t[f + 1];
    for (int i = n + 1; i <= f; i++){
        t[i].pb({p[i], 0});
    }
    
    function<void(int)> fill = [&](int v){
        if (!d[v]) return;
        vector<ll> s;
        for (int i: g[v]){
            fill(i);
            for (auto p: t[i]){
                s.pb(p.ff);
            }
        }
        
        for (ll x: s){
            ll sum = 0;
            for (int i: g[v]){
                if (t[i].empty()) continue;
                ll mn = 1e18;
                for (auto [a, b]: t[i]){
                    mn = min(mn, b + abs(a - x));
                }
                sum += mn;
            }
            t[v].pb({x, sum});
        }
    };
    fill(1);
    
    ll out = 1e18;
    for (auto [x, y]: t[1]) out = min(out, y);
    cout<<out<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...