Submission #1145313

#TimeUsernameProblemLanguageResultExecution timeMemory
1145313keaucucalJobs (BOI24_jobs)C++20
29 / 100
231 ms19272 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
using namespace std;
using ll = long long;
#define int long long

signed main() {
	ll n, s;
	cin >> n >> s;
	vector<int> val(n + 1);
	vector<vector<int>> adj(n + 1);
	priority_queue<pair<int, int>> pq;
	for (int i = 1; i <= n; i++) {
		int p;
		cin >> val[i] >> p;
		adj[p].push_back(i);
		
		if (p == 0) {
			pq.push(make_pair(val[i], i));
		}
	}

	ll ans = s;
	while (!pq.empty()) {
		int sum = pq.top().first;
		int u = pq.top().second;
		pq.pop();

		if (sum + ans < 0) {
			// cout << u << ' ' << sum << '\n';
			break;
		}

		if (sum > 0) {
			// cout << u << ' ' << sum << '\n';
			ans += sum;
			sum = 0;
		}

		for (int v : adj[u]) {
			pq.push(make_pair(sum + val[v], v));
		}
	}
	cout << ans - s << '\n';

	// cout << ans << '\n';
	// cout << ans - s << '\n';
}
#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...