Submission #417226

#TimeUsernameProblemLanguageResultExecution timeMemory
417226huangqrWorst Reporter 4 (JOI21_worst_reporter4)C++14
14 / 100
2071 ms60444 KiB
#ifdef local #define debug(x) cout<<#x<<" "<<x<<endl; #else #define debug(x) #endif #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pl; const ll mod=1e9+7,lim=2e5+5,bitlim=15,inf=1e9; vector<ll>adjl[lim]; ll pwr[lim],cost[lim]; map<ll,ll> dp(ll pos){ map<ll,ll>ret; if(adjl[pos].size() == 0){ ret[0] = 0; ret[pwr[pos] + 1] = cost[pos]; } else{ vector<map<ll,ll> >vv; for(auto u:adjl[pos]){ vv.push_back(dp(u)); } sort(vv.begin(),vv.end(),[](map<ll,ll> a,map<ll,ll> b){ return a.size()<b.size(); }); ret = vv.back(); vv.pop_back(); for(auto x:vv){ for(auto p:x){ ll k,v; tie(k,v)=p; ret[k]+=v; } } ret[0] += cost[pos]; ret[pwr[pos] + 1] += cost[pos]; auto it=ret.upper_bound(pwr[pos]); ll rem=cost[pos]; while(rem>0){ it--; if(rem<=it->second)it->second-=rem,rem=0; else rem-=it->second,it=ret.erase(it); } } return ret; } int main(){ ios_base::sync_with_stdio(0),cin.tie(NULL); ll n; cin>>n; for(int i=1;i<=n;i++){ ll a; cin>>a>>pwr[i]>>cost[i]; if(i!=a)adjl[a].push_back(i); } cout<<dp(1).begin()->second<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...