Submission #1143611

#TimeUsernameProblemLanguageResultExecution timeMemory
1143611why1Jobs (BOI24_jobs)C++20
29 / 100
1427 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back
#define pii pair<ll,ll>
#define sz size()
#define all(v) v.begin(),v.end()
#define fi first
#define se second

const int N = 2e5;
const int mod = 1e9+7;
const ll INF = 1e18;

const int di[] = {1, -1, 0, 0};
const int dj[] = {0, 0, 1, -1};

void solve() {
	ll n,s;
	cin>>n>>s;
	ll val[n+1],p[n+1];
	for(int i = 1; i <= n; i++){
		cin>>val[i]>>p[i];
	}
	set<pair<pii,ll>> st;
	pair<pii,ll> nxt[n+1];
	bool used[n+1];
	memset(used,0,sizeof(used));
	for(int i = n, id = 1; i >= 1; i--){
		if(!used[i]){
			vector<ll> v;	
			vector<pii> vec;
			ll cur=i;
			while(cur!=0){
				v.pb(cur);
				used[cur]=true;
				cur=p[cur];
			}
			reverse(all(v));
			ll x=0,s=0;
			for(int j = 0; j < v.sz; j++){
				x+=val[v[j]];
				if(x<0)
					s=min(s,x);
				if(x>0){
					vec.pb({abs(s),x});
					x=s=0;
				}
			}
			if(!vec.empty() && vec[0].se>0)
				st.insert({vec[0],id+1});
			for(int j = 0; j < vec.sz; j++){
				if(j==vec.sz-1){
					nxt[id]={vec[j],-1};
				}
				else{
					nxt[id]={vec[j],id+1};
				}
				id++;
			}
			id++;
		}
	}
	ll ans=s,x=s;
	while(!st.empty()){
		auto it=*st.begin();
		st.erase(it);
		if(x>=it.fi.fi){
			x+=it.fi.se;
			ans=max(ans,x);
			if(it.se!=-1 && nxt[it.se].fi.se>0)
				st.insert(nxt[it.se]);
		}
		else break;
	}
	cout<<ans-s<<"\n";
}

int main() {

	//freopen("cowrun.in","r",stdin);
	//freopen("cowrun.out","w",stdout);

    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

	int 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...