Submission #1190947

#TimeUsernameProblemLanguageResultExecution timeMemory
1190947raphaelpFireworks (APIO16_fireworks)C++20
100 / 100
209 ms73000 KiB
#include<bits/stdc++.h> using namespace std; long long dfs(long long x, long long l, vector<vector<pair<long long,long long>>> &AR, priority_queue<long long> &PQ) { priority_queue<long long> temp; long long slope =0; if (AR[x].size()){ for (long long i=0; i<AR[x].size(); i++) { slope+=dfs(AR[x][i].first, AR[x][i].second, AR, temp); if (temp.size()>PQ.size())swap(PQ, temp); while(!temp.empty()) { PQ.push(temp.top()); temp.pop(); } } while(PQ.size()>slope+1)PQ.pop(); long long bar1 = PQ.top()+l; PQ.pop(); long long bar0 = PQ.top()+l; PQ.pop(); PQ.push(bar0); PQ.push(bar1); } else { slope=1; PQ.push(l); PQ.push(l); } return slope; } int main() { long long N, M; cin >> N >> M; N+=M; long long tot=0; vector<vector<pair<long long,long long>>> AR(N); for (long long i=1; i<N; i++) { long long x, d; cin >> x >> d; tot+=d; x--; AR[x].push_back({i, d}); } priority_queue<long long> PQ; long long ans = dfs(0, 0, AR, PQ); PQ.pop(); long long last = PQ.top(); for (long long i=0; !PQ.empty(); i++) { tot-= i * (last-PQ.top()); last = PQ.top(); PQ.pop(); } tot-=last*ans; cout << tot << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...