Submission #1284797

#TimeUsernameProblemLanguageResultExecution timeMemory
1284797imarnJobs (BOI24_jobs)C++20
11 / 100
327 ms104468 KiB
//#include "festival.h" #include<bits/stdc++.h> #pragma GCC optimize("O3") #pragma GCC target("avx2") #define ll long long #define ld long double #define pii pair<int,int> #define pll pair<ll,ll> #define plx pair<ll,int> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vvi vector<vi> #define ub(x,i) upper_bound(all(x),i)-x.begin() #define lb(x,i) lower_bound(all(x),i)-x.begin() #define sz(x) (ll)x.size() #define cd complex<double> #define t3 tuple<ll,ll,ll> using namespace std; const int mxn=3e5+5; vector<int>g[mxn]; ll x[mxn]{0},p[mxn]; multiset<pll>ms[mxn]; void dfs(int u,int p){ for(auto v:g[u]){ if(v==p)continue; dfs(v,u); if(ms[v].size()>ms[u].size())swap(ms[u],ms[v]); for(auto it : ms[v])ms[u].insert(it); }ll st=max((ll)0,-x[u]); ll cst=x[u]; while(cst<0&&!ms[u].empty()){ auto it = ms[u].begin(); cst+=it->s; st=max(st,it->f);ms[u].erase(it); }if(cst<0)return; while(!ms[u].empty()&&ms[u].begin()->f<=st){ cst+=ms[u].begin()->s; ms[u].erase(ms[u].begin()); } ms[u].insert({st,cst}); } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int n;ll s;cin>>n>>s; for(int i=1;i<=n;i++){ cin>>x[i]>>p[i];g[p[i]].pb(i);g[i].pb(p[i]); }dfs(0,0);ll rs=s; while(!ms[0].empty()&&rs>=ms[0].begin()->f){ rs+=ms[0].begin()->s;ms[0].erase(ms[0].begin()); }cout<<rs-s; }
#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...