Submission #568191

#TimeUsernameProblemLanguageResultExecution timeMemory
568191sidonFireworks (APIO16_fireworks)C++17
19 / 100
1 ms340 KiB
#include <bits/stdc++.h> using namespace std; #define int int64_t signed main() { ios::sync_with_stdio(0), cin.tie(0); int N, M; cin >> N >> M; N += M; int c[N]; priority_queue<int> dp[N]; vector<int> g[N]; for(int i = 1; i < N; ++i) { int p; cin >> p >> c[i]; g[p-1].push_back(i); } for(int u = N; u--; ) { if(!empty(g[u])) { for(int v : g[u]) { assert(size(dp[v]) > size(g[v])); for(int i = size(g[v]); --i > 0; ) dp[v].pop(); assert(size(dp[v]) > 1); int x = dp[v].top(); dp[v].pop(); int y = dp[v].top(); dp[v].pop(); dp[v].push(x + c[v]); dp[v].push(y + c[v]); if(size(dp[v]) > size(dp[u])) dp[u].swap(dp[v]); } for(int v : g[u]) while(!empty(dp[v])) dp[u].push(dp[v].top()), dp[v].pop(); } else { dp[u].push(0); dp[u].push(0); } } int ans = accumulate(c + 1, c + N, 0), d = -M, x {}; vector<int> res; while(!empty(dp[0])) res.push_back(dp[0].top()), dp[0].pop(); for(int i = size(res) - 1; d < 0; --i, ++d) { ans += d * (res[i] - x); x = res[i]; } 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...