Submission #1306372

#TimeUsernameProblemLanguageResultExecution timeMemory
1306372HasanV11010238Fireworks (APIO16_fireworks)C++20
100 / 100
358 ms96552 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long vector<vector<vector<ll>>> v; vector<priority_queue<ll>> pr; ll ans = 0, n, fi; void dfs(int x, ll co){ if (v[x].size() == 0){ pr[x].push(co); pr[x].push(co); ans -= co; return; } int cnt = 0; for (auto el : v[x]){ cnt++; dfs(el[0], el[1]); if (pr[el[0]].size() > pr[x].size()){ swap(pr[el[0]], pr[x]); } while (!pr[el[0]].empty()){ pr[x].push(pr[el[0]].top()); pr[el[0]].pop(); } } int wh = 0; if (x != 1) wh++; for (int i = wh; i < cnt; i++){ ans += pr[x].top(); pr[x].pop(); } if (x != 1){ ll fi = pr[x].top(); pr[x].pop(); ll se = pr[x].top(); pr[x].pop(); pr[x].push(fi + co); pr[x].push(se + co); ans -= co; } } int main(){ ll a, b; cin>>fi>>n; n += fi; v.assign(n + 1, vector<vector<ll>>()); pr.assign(n + 1, priority_queue<ll>()); for (int i = 2; i <= n; i++){ cin>>a>>b; v[a].push_back({i, b}); } dfs(1, 0); cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...