Submission #1262141

#TimeUsernameProblemLanguageResultExecution timeMemory
1262141huutuanJobs (BOI24_jobs)C++17
100 / 100
242 ms71868 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N=3e5+10; int n, s, p[N], x[N]; vector<int> g[N]; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq[N]; void dfs(int u){ for (int v:g[u]){ dfs(v); if (pq[u].size()<pq[v].size()) pq[u].swap(pq[v]); while (pq[v].size()) pq[u].push(pq[v].top()), pq[v].pop(); } if (x[u]>=0) pq[u].emplace(0, x[u]); else{ int need=-x[u], pf=-x[u]; while (need && pq[u].size()){ auto t=pq[u].top(); pq[u].pop(); int m=min(need, t.second); pf=max(pf, need+t.first); need-=m; t.second-=m; if (t.second) pq[u].push(t); } if (need) return; int sum=0; while (pq[u].size() && pq[u].top().first<=pf){ sum+=pq[u].top().second; pq[u].pop(); } pq[u].emplace(pf, sum); } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> s; for (int i=1; i<=n; ++i){ cin >> x[i] >> p[i]; g[p[i]].push_back(i); } dfs(0); int cur=s; while (pq[0].size() && cur>=pq[0].top().first){ cur+=pq[0].top().second; pq[0].pop(); } cout << cur-s << '\n'; return 0; }
#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...