Submission #1210613

#TimeUsernameProblemLanguageResultExecution timeMemory
1210613emptypringlescanWorst Reporter 4 (JOI21_worst_reporter4)C++17
79 / 100
289 ms589824 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...