제출 #358768

#제출 시각아이디문제언어결과실행 시간메모리
358768super_j6Fireworks (APIO16_fireworks)C++14
100 / 100
170 ms32468 KiB
#include <iostream> #include <cstdio> #include <algorithm> #include <queue> using namespace std; #define endl '\n' #define ll long long #define pi pair<int, int> #define f first #define s second const int mxn = 300000; int n, m; ll d[mxn], f[mxn], p[mxn], dp[mxn]; priority_queue<ll> pq[mxn]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i = 1; i < n + m; i++){ cin >> p[i] >> f[i]; d[--p[i]]++; if(i >= n){ dp[p[i]] -= f[i]; for(int j = 0; j < 2; j++) pq[p[i]].push(f[i]); } } for(int i = n - 1; i; i--){ for(int j = 0; j < d[i] - 1; j++) dp[i] += pq[i].top(), pq[i].pop(); ll x[2]; for(int j = 0; j < 2; j++) x[j] = pq[i].top(), pq[i].pop(); for(int j = 0; j < 2; j++) pq[i].push(x[j] + f[i]); dp[i] -= f[i], dp[p[i]] += dp[i]; if(pq[p[i]].size() < pq[i].size()) swap(pq[p[i]], pq[i]); while(!pq[i].empty()) pq[p[i]].push(pq[i].top()), pq[i].pop(); } ll ret = dp[0]; for(int i = 0; i < d[0]; i++) ret += pq[0].top(), pq[0].pop(); cout << ret << endl; 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...