#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> adj[200005];
pair<long long,long long> arr[200005];
multiset<pair<long long,long long> > vals[200005];
multiset<pair<long long,long long> >::iterator it;
void dfs(int x){
for(int i:adj[x]){
dfs(i);
if(vals[x].size()<vals[i].size()) swap(vals[x],vals[i]);
for(auto i:vals[i]) vals[x].insert(i);
vals[i].clear();
}
long long cur=0;
while(true){
it=vals[x].lower_bound({arr[x].first,-1});
if(it==vals[x].begin()) break;
it--;
int pt=it->first;
cur+=it->second;
vals[x].erase(it);
if(cur>=arr[x].second){
vals[x].insert({pt,cur-arr[x].second});
break;
}
}
vals[x].insert(arr[x]);
}
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
long long ans=0;
for(int i=1; i<=n; i++){
int p;
cin >> p;
if(p!=i) adj[p].push_back(i);
cin >> arr[i].first >> arr[i].second;
ans+=arr[i].second;
}
dfs(1);
for(auto i:vals[1]){
ans-=i.second;
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |