Submission #92220

#TimeUsernameProblemLanguageResultExecution timeMemory
92220moonrabbit2Fireworks (APIO16_fireworks)C++17
100 / 100
191 ms51088 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> P; const ll N=3e5+5; int n,m,p[N],c[N]; struct ddata { ll a,b; priority_queue<ll> *pq; ddata operator +(ddata k){ ddata res; tie(res.a,res.b)=P(a+k.a,b+k.b); if(pq->size()>=k.pq->size()){ res.pq=pq; while(k.pq->size()){ res.pq->push(k.pq->top()); k.pq->pop(); } } else{ res.pq=k.pq; while(pq->size()){ res.pq->push(pq->top()); pq->pop(); } } return res; } }; ddata a[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(int i=2;i<=n+m;i++) cin>>p[i]>>c[i]; for(int i=n+m;i>=1;i--){ a[i].a=a[i].b=0; a[i].pq=new priority_queue<ll>; } for(int i=n+m;i>n;i--){ a[i].a=1; a[i].b=-c[i]; a[i].pq->push(c[i]); a[i].pq->push(c[i]); a[p[i]]=a[p[i]]+a[i]; } for(int i=n;i>=2;i--){ while(a[i].a>1){ a[i].a--; a[i].b+=a[i].pq->top(); a[i].pq->pop(); } ll t1=a[i].pq->top(); a[i].pq->pop(); ll t2=a[i].pq->top(); a[i].pq->pop(); a[i].pq->push(t1+c[i]); a[i].pq->push(t2+c[i]); a[i].b-=c[i]; a[p[i]]=a[p[i]]+a[i]; } while(a[1].a>0){ a[1].a--; a[1].b+=a[1].pq->top(); a[1].pq->pop(); } cout<<a[1].b; 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...