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