Submission #994976

#TimeUsernameProblemLanguageResultExecution timeMemory
994976pavementJobs (BOI24_jobs)C++17
100 / 100
195 ms61904 KiB
#include <bits/stdc++.h> using namespace std; #define mp make_pair #define pb push_back #define int long long using ll = long long; using ll2 = pair<ll, ll>; int N, x[300005]; ll s, profit; vector<int> adj[300005]; priority_queue<ll2, vector<ll2>, greater<ll2> > pq[300005]; void dfs(int u) { for (auto v : adj[u]) { dfs(v); if (pq[u].size() < pq[v].size()) { swap(pq[u], pq[v]); } while (!pq[v].empty()) { pq[u].push(pq[v].top()); pq[v].pop(); } } if (x[u] >= 0) { pq[u].emplace(0, x[u]); } else { ll r = -x[u], p = x[u]; while (!pq[u].empty() && p < 0) { auto [nr, np] = pq[u].top(); r = max(r, nr - p); p += np; pq[u].pop(); } if (p >= 0) { while (!pq[u].empty() && r >= pq[u].top().first) { p += pq[u].top().second; pq[u].pop(); } pq[u].emplace(r, p); } else { assert(pq[u].empty()); } } } main() { ios::sync_with_stdio(0); cin.tie(0); cin >> N >> s; for (int i = 1, p; i <= N; i++) { cin >> x[i] >> p; adj[p].pb(i); } dfs(0); while (!pq[0].empty() && s >= pq[0].top().first && pq[0].top().second >= 0) { s += pq[0].top().second; profit += pq[0].top().second; pq[0].pop(); } cout << profit << '\n'; }

Compilation message (stderr)

Main.cpp:49:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   49 | main() {
      | ^~~~
#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...