#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |