Submission #1001298

#TimeUsernameProblemLanguageResultExecution timeMemory
1001298dimashhhFireworks (APIO16_fireworks)C++17
7 / 100
6 ms35316 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int  N = 4e5 + 30, MOD = 1e9 + 7;

int n,m;
vector<pair<int,int>> g[N];
multiset<ll> st[N];
ll h[N],l[N],r[N];
int mx[N];
void merge(int v,int to){
    mx[v]++;
    for(int j:st[to]){
        st[v].insert(j);
    }
}
ll dist(int to,ll x){
    if(x >= r[to]){
        return h[to] + x - r[to];
    }
    if(x < l[to]){
        return h[to] + l[to] - x;
    }
    return h[to];
}
void dfs(int v,int W = 0){
    if(g[v].empty()){
        st[v].insert(W);
        st[v].insert(W);
        mx[v] = 1;
        h[v] = 0;
        l[v] = r[v] = W;
        return;
    }
    for(auto [to,w]:g[v]){
        dfs(to,w);
        merge(v,to);
    }
    while(mx[v] > 1){
        mx[v]--;
        st[v].erase(st[v].find(*st[v].rbegin()));
    }
    ll x = (*st[v].rbegin());
    st[v].erase(st[v].find(*st[v].rbegin()));
    ll y = (*st[v].rbegin());
    st[v].erase(st[v].find(*st[v].rbegin()));
    st[v].insert(x + W);
    st[v].insert(y + W);
    r[v] = (*st[v].rbegin());
    l[v] = (*(++(st[v].rbegin())));
    for(auto [to,w]:g[v]){
        h[v] += dist(to,r[v] - W);
    }
    // cout << v << ' ' << dist(9,3) << ' ' << h[v] << ' ' << l[v] << ' ' << r[v] << ' ' << "| ";
    // for(int i:st[v]){
    //     cout << i << ' ';
    // }
    // cout << '\n';
}
void test(){
    cin >> n >> m;
    int P = -1;
    for(int i = 2;i <= n + m;i++){
        int a,b;
        cin >> a >> b;
        g[a].push_back({i,b});
        if(a == 1){
            P = i;
        }
    }
    dfs(1);
    cout << h[1] << '\n';
}
int main() {
    ios_base::sync_with_stdio(false);cin.tie(0);
    int t = 1;
    // cin >> t;
    while(t--){
        test();
    }
}

Compilation message (stderr)

fireworks.cpp: In function 'void test()':
fireworks.cpp:65:9: warning: variable 'P' set but not used [-Wunused-but-set-variable]
   65 |     int P = -1;
      |         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...