Submission #994974

#TimeUsernameProblemLanguageResultExecution timeMemory
994974hmm789Jobs (BOI24_jobs)C++14
40 / 100
194 ms66916 KiB
#include <bits/stdc++.h> using namespace std; #define int long long vector<int> adj[300005]; int a[300005]; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> v[300005]; void dfs(int x) { for(int i : adj[x]) { dfs(i); if(v[i].size() > v[x].size()) swap(v[i], v[x]); while(v[i].size()) { v[x].push(v[i].top()); v[i].pop(); } } if(a[x] >= 0) v[x].push({0, a[x]}); else { pair<int, int> cur = {-a[x], a[x]}; while(v[x].size() && cur.second < 0) { pair<int, int> tmp = v[x].top(); v[x].pop(); cur.first = max(cur.first, tmp.first-cur.second); cur.second += tmp.second; } if(cur.second >= 0) v[x].push(cur); } } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, s, x, ans = 0; cin >> n >> s; a[0] = s; for(int i = 1; i <= n; i++) { cin >> a[i] >> x; adj[x].push_back(i); } dfs(0); while(v[0].size() && v[0].top().first <= ans) { ans += v[0].top().second; v[0].pop(); } cout << ans-s; }
#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...