#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 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... |