Submission #589684

#TimeUsernameProblemLanguageResultExecution timeMemory
589684PetiWorst Reporter 4 (JOI21_worst_reporter4)C++14
79 / 100
446 ms524288 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> g; vector<int> h, ert; vector<map<int, long long>> mps; void bejar(int akt){ for(int x : g[akt]){ bejar(x); if(mps[x].size() > mps[akt].size()) swap(mps[akt], mps[x]); for(auto p : mps[x]) mps[akt][p.first] += p.second; } auto it = mps[akt].find(h[akt]); if(it == mps[akt].end()){ mps[akt][h[akt]] = ert[akt]; it = mps[akt].find(h[akt]); } else{ mps[akt][h[akt]] += ert[akt]; } long long tmp = ert[akt]; while(it != mps[akt].begin() && prev(it)->second < tmp){ tmp -= prev(it)->second; mps[akt].erase(prev(it)); } if(it != mps[akt].begin()) prev(it)->second -= tmp; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin>>n; g.resize(n); h.resize(n); ert.resize(n); mps.resize(n); for(int i = 0; i < n; i++){ int a; cin>>a>>h[i]>>ert[i]; --a; if(a != i) g[a].push_back(i); } bejar(0); long long meg = accumulate(ert.begin(), ert.end(), 0ll); for(auto p : mps[0]) meg -= p.second; cout<<meg<<'\n'; return 0; } /* 6 1 6 5 1 3 6 1 8 4 3 4 9 2 2 5 2 5 6 20 15 62 418848971 13 5 277275513 14 60 80376452 12 14 256845164 12 42 481331310 6 86 290168639 3 98 947342135 3 19 896070909 16 39 48034188 8 29 925729089 18 97 420006994 13 51 454182928 19 61 822405612 13 37 148425187 15 77 474094143 14 27 272926693 18 43 566552069 9 93 790433300 10 73 61654171 14 28 334498030 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...