#include<bits/stdc++.h>
#define int long long
#define MAXN (int)4e5+5
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
bool vis[MAXN];
vector<int> g[MAXN];
int n,s,e[MAXN];
class ll {
public:
bool u=0;
int v=0,m=0;
vector<ll*> a;
ll(){
u=0;v=0;m=0;
};
};
void dfs(int x,ll*a,int v,int m){
vis[x]=1;
v+=e[x];
m=min(v,m);
if(v>0){
a->v=v;a->u=1;a->m=m;
a->a.push_back(new ll());
for(int&y:g[x]){
if(!vis[y]){
dfs(y,a->a[a->a.size()-1],0,0);
}
}
}else{
for(int&y:g[x]){
if(!vis[y]){
dfs(y,a,v,m);
}
}
}
}
void solve() {
cin>>n>>s;
stack<int>d;
for(int i=1;i<=n;i++){int p;
cin>>e[i]>>p;
if(!p){
d.push(i);
continue;
}
g[p].push_back(i);
}
priority_queue<pair<int,ll*>>pq;
while(!d.empty()){
ll* x=new ll();
dfs(d.top(),x,0,0);
d.pop();
if(x!=nullptr&&x->u){
pq.emplace(x->m,x);
}
}int os=s;
while(!pq.empty()){
ll* x=pq.top().se;pq.pop();
if(s<x->m){
break;
}
for(ll*b:x->a){
if(b!=nullptr&&b->u){
pq.emplace(b->m,b);
}
}
s+=x->v;
}
cout<<s-os<<'\n';
}
int32_t main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int32_t T=1;//cin>>T;
while(T--) {
solve();
}
return 0;
}
# | 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... |