Submission #1295844

#TimeUsernameProblemLanguageResultExecution timeMemory
1295844dooweyFireworks (APIO16_fireworks)C++20
0 / 100
6 ms9788 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pii; #define fi first #define se second #define mp make_pair #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); const int N = (int)3e5 + 10; ll A[N], B[N]; vector<pii> T[N]; priority_queue<ll> que[N]; void dfs(int u, ll in){ if(T[u].empty()){ que[u].push(in); que[u].push(in); A[u] = 1; B[u] = -in; return; } for(auto x : T[u]){ dfs(x.fi, x.se); A[u] += A[x.fi]; B[u] += B[x.fi]; if(que[u].size() < que[x.fi].size()) swap(que[u], que[x.fi]); while(!que[x.fi].empty()){ que[u].push(que[x.fi].top()); que[x.fi].pop(); } } while(A[u] > 1){ A[u] -- ; B[u] += que[u].top(); que[u].pop(); } A[u] = 1; B[u] = -in; ll p1 = que[u].top(); que[u].pop(); ll p2 = que[u].top(); que[u].pop(); que[u].push(p1 + in); que[u].push(p2 + in); } int main(){ fastIO; int n, m; cin >> n >> m; int par, c; for(int i = 2; i <= n + m ; i ++ ){ cin >> par >> c; T[par].push_back(mp(i, c)); } dfs(1, 1); while(A[1] > 0){ A[1] -- ; B[1] += que[1].top(); que[1].pop(); } cout << B[1] << "\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...