Submission #1159565

#TimeUsernameProblemLanguageResultExecution timeMemory
1159565Tenis0206Fireworks (APIO16_fireworks)C++20
100 / 100
131 ms84880 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int nmax = 3e5; int n, m; int t[nmax + 5], c[nmax + 5]; vector<int> G[nmax + 5]; struct funct { int a, b; priority_queue<int> *h; funct() { a = b = 0; h = new priority_queue<int>; } void operator += (funct other) { a += other.a; b += other.b; if(other.h->size() > h->size()) { swap(other.h, h); } while(!other.h->empty()) { h->push(other.h->top()); other.h->pop(); } } void elim(int slope) { while(a > slope) { b += h->top(); h->pop(); --a; } } void shift(int len) { b -= len; int poz1 = h->top(); h->pop(); int poz2 = h->top(); h->pop(); h->push(poz1 + len); h->push(poz2 + len); } }; funct f[nmax + 5]; void dfs(int nod) { if(nod > n) { f[nod].a = 1; f[nod].b = -c[nod]; f[nod].h->push(c[nod]); f[nod].h->push(c[nod]); return; } for(auto it : G[nod]) { dfs(it); f[nod] += f[it]; } f[nod].elim(1); f[nod].shift(c[nod]); } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(int i=2;i<=n+m;i++) { cin>>t[i]>>c[i]; G[t[i]].push_back(i); } dfs(1); f[1].elim(0); cout<<f[1].b<<'\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...