제출 #1295013

#제출 시각아이디문제언어결과실행 시간메모리
1295013dooweyFireworks (APIO16_fireworks)C++20
7 / 100
3 ms716 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> 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)2e5 + 10; vector<pii> T[N]; vector<ll> que[N]; ll low[N]; void dfs(int u){ if(T[u].empty()){ que[u] = {0ll,0ll}; return; } for(auto x : T[u]){ dfs(x.fi); for(auto y : que[x.fi]){ que[u].push_back(y + x.se); } low[u] += low[x.fi]; } sort(que[u].begin(), que[u].end()); int m = que[u].size() / 2; ll lf = que[u][m - 1], rf = que[u][m]; for(auto x : T[u]){ vector<ll> qu; for(auto y : que[x.fi]){ qu.push_back(y + x.se); } if(qu[1] < rf){ low[u] += rf - qu[1]; } else if(qu[0] > rf){ low[u] += qu[0] - rf; } } que[u] = {lf, rf}; } int main(){ fastIO; int n, m; cin >> n >> m; for(int i = 2; i <= n + m ; i ++ ){ int p, c; cin >> p >> c; T[p].push_back(mp(i, c)); } dfs(1); cout << low[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...