Submission #329403

#TimeUsernameProblemLanguageResultExecution timeMemory
329403tnk2908Fireworks (APIO16_fireworks)C++14
100 / 100
213 ms53368 KiB
// // main.cpp // fireworks // // Created by Trần Nam Khánh on 11/21/20. // #include <iostream> #include <queue> using namespace std; const long long nax=3e5+1; struct data { long long a,b,p,c; priority_queue<long long>*q; data operator +(data tmp) { data s; s.p=p; s.c=c; s.a=a+tmp.a; s.b=b+tmp.b; if(q->size()<tmp.q->size())swap(q,tmp.q); s.q=q; while(!tmp.q->empty()) { s.q->push(tmp.q->top()); tmp.q->pop(); } return s; } }d[nax]; long long n,m; int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>m; for(long long i=2;i<=n+m;i++) { cin>>d[i].p>>d[i].c; } for(long long i=1;i<=n+m;i++) { d[i].a=0; d[i].b=0; d[i].q=new priority_queue<long long>; } for(long long i=n+m;i>n;i--) { d[i].a=1; d[i].b=0; d[i].q->push(0); d[i].q->push(0); } for(long long i=n+m;i>=2;i--) { long long p=d[i].p; while(d[i].a>1) { d[i].a--; d[i].b+=d[i].q->top(); d[i].q->pop(); } d[i].b-=d[i].c; long long t1=d[i].q->top();d[i].q->pop(); long long t0=d[i].q->top();d[i].q->pop(); d[i].q->push(t0+d[i].c); d[i].q->push(t1+d[i].c); d[p]=d[p]+d[i]; } while(d[1].a>0) { d[1].a--; d[1].b+=d[1].q->top(); d[1].q->pop(); } cout<<d[1].b<<endl; return 0; } /* 4 6 1 5 2 5 2 8 3 3 3 2 3 3 2 9 4 4 4 3 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...