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