# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1105892 | WeIlIaN | Fireworks (APIO16_fireworks) | C++14 | 143 ms | 50996 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
/*
* Author: Gyeonggeun Kim(kriii)
* Time Complexity: O(N lg^2 N)
*/
#include <stdio.h>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn = 300003;
priority_queue<long long> *Q[maxn];
int N,M,V,P[maxn],C[maxn],D[maxn]; long long E[maxn];
int main()
{
scanf ("%d %d",&N,&M);
V = N + M;
for (int i=2;i<=V;i++) scanf ("%d %d",&P[i],&C[i]);
for (int i=1;i<=V;i++) Q[i] = new priority_queue<long long>;
for (int i=V;i>=2;i--){
long long p = 0, q = 0;
if (D[i]){
for (int j=1;j<D[i];j++){
E[i] += Q[i]->top(); Q[i]->pop();
}
p = Q[i]->top(); Q[i]->pop();
q = Q[i]->top(); Q[i]->pop();
}
Q[i]->push(p+C[i]);
Q[i]->push(q+C[i]);
E[i] -= C[i];
priority_queue<long long> *&a = Q[i], *&b = Q[P[i]];
if (a->size() > b->size()) swap(a,b);
while (!a->empty()){
b->push(a->top()); a->pop();
}
E[P[i]] += E[i];
D[P[i]]++;
}
long long ans = E[1];
for (int i=0;i<D[1];i++){
ans += Q[1]->top(); Q[1]->pop();
}
printf ("%lld\n",ans);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |