Submission #1178694

#TimeUsernameProblemLanguageResultExecution timeMemory
1178694gygJobs (BOI24_jobs)C++20
29 / 100
377 ms93528 KiB
#include <bits/stdc++.h>   
using namespace std;
#define int long long
#define arr array 
#define vec vector 
#define pii pair<int, int>
#define fir first 
#define sec second 
const int N = 3e5 + 5, INF = 5e18;

int n, s;
arr<int, N> vl;
arr<vec<int>, N> ch;

void mrg(set<pii>& x, set<pii>& y) { // y into x
    if (x.size() < y.size()) x.swap(y);
    for (pii z : y) x.insert(z);
}

arr<set<pii>, N> dp;
void dfs(int u = 0) {
    for (int v : ch[u]) {
        dfs(v);
        mrg(dp[u], dp[v]);
    }

    pii x = {max(-vl[u], 0ll), vl[u]};
    while (dp[u].size() && (x.sec <= 0 || x >= *dp[u].begin())) {
        pii y = *dp[u].begin(); dp[u].erase(dp[u].begin());
        x = {max(x.fir, y.fir - x.sec), x.sec + y.sec};
    }
    if (x.sec <= 0) return;
    dp[u].insert(x);
}

void cmp() {
    int t = s;
    for (pii x : dp[0]) {
        if (t < x.fir) continue;
        t += x.sec;
    }
    cout << t - s << '\n';
}

signed main() {
    // freopen("in", "r", stdin);
    cin >> n >> s;
    for (int u = 1; u <= n; u++) {
        int v; cin >> vl[u] >> v;
        ch[v].push_back(u);
    }

    dfs();

    // for (pii x : dp[0]) {
    //     cout << x.fir << " " << x.sec << '\n';
    // }

    cmp();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...