Submission #705879

#TimeUsernameProblemLanguageResultExecution timeMemory
705879600MihneaFireworks (APIO16_fireworks)C++17
100 / 100
199 ms46932 KiB
#include <cmath> #include <functional> #include <fstream> #include <iostream> #include <vector> #include <algorithm> #include <string> #include <set> #include <map> #include <list> #include <time.h> #include <math.h> #include <random> #include <deque> #include <queue> #include <unordered_map> #include <unordered_set> #include <iomanip> #include <cassert> #include <bitset> #include <sstream> #include <chrono> #include <cstring> #include <numeric> using namespace std; typedef long long ll; signed main() { #ifdef ONPC FILE* stream; freopen_s(&stream, "input.txt", "r", stdin); #else ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #endif int __, n; cin >> __ >> n; n += __; vector<vector<int>> g(n); vector<int> up(n, 0); vector<priority_queue<ll>> pqs(n); for (int i = 1; i < n; i++) { int par; cin >> par >> up[i]; par--; assert(0 <= par && par < i); g[par].push_back(i); } ll sol = 0; for (int i = 0; i < n; i++) { sol += up[i]; } for (int i = n - 1; i >= 0; i--) { if (g[i].empty()) { pqs[i].push(up[i]); pqs[i].push(up[i]); continue; } for (auto& j : g[i]) { if ((int)pqs[i].size() < (int)pqs[j].size()) { swap(pqs[i], pqs[j]); } while (!pqs[j].empty()) { pqs[i].push(pqs[j].top()); pqs[j].pop(); } } for (int s = 1; s <= (int)g[i].size() - 1; s++) { pqs[i].pop(); } ll x = pqs[i].top() + up[i]; pqs[i].pop(); ll y = pqs[i].top() + up[i]; pqs[i].pop(); pqs[i].push(x); pqs[i].push(y); } pqs[0].pop(); while (!pqs[0].empty()) { sol -= pqs[0].top(); pqs[0].pop(); } cout << sol << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...