Submission #1153059

#TimeUsernameProblemLanguageResultExecution timeMemory
1153059vladiliusFireworks (APIO16_fireworks)C++20
7 / 100
1 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<pii> g[f + 1];
    for (int i = 2; i <= f; i++){
        int x, w; cin>>x>>w;
        g[x].pb({i, w});
        p[i] = p[x] + w;
    }
    
    vector<ll> d(m + 1);
    for (int i = 1; i <= m; i++) d[i] = p[n + i];
    sort(d.begin() + 1, d.end());
    
    vector<vector<ll>> t(f + 1, vector<ll>(m + 1));
    for (int i = n + 1; i <= f; i++){
        for (int j = 1; j <= m; j++){
            t[i][j] = abs(d[j] - p[i]);
        }
    }
    
    function<void(int)> fill = [&](int v){
        if (v > n) return;
        for (auto [i, w]: g[v]){
            fill(i);
        }
        
        for (int x = 1; x <= m; x++){
            for (auto [i, w]: g[v]){
                ll mn = 1e18;
                for (int a = 1; a <= m; a++){
                    if (d[a] <= (w + d[x])){
                        mn = min(mn, t[i][a] + abs(d[a] - d[x]));
                    }
                }
                t[v][x] += mn;
            }
        }
    };
    fill(1);
    
    ll out = 1e18;
    for (int x = 1; x <= m; x++){
        out = min(out, t[1][x]);
    }
    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...