Submission #1147958

#TimeUsernameProblemLanguageResultExecution timeMemory
1147958vulestamenkovicJobs (BOI24_jobs)C++20
0 / 100
135 ms29656 KiB
#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 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...