Submission #1156704

#TimeUsernameProblemLanguageResultExecution timeMemory
1156704daoquanglinh2007Fireworks (APIO16_fireworks)C++20
7 / 100
3 ms7492 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pii pair <int, int>
#define fi first
#define se second
#define mp make_pair
#define isz(a) (int)(a).size()

const int NM = 3e5;

int N, M;
vector <pii> adj[NM+5];

pii dfs(int u, int p){
    vector <int> arr = {};
    int res = 0;
    for (pii _ : adj[u]){
        int v = _.fi, c = _.se;
        if (v == p) continue;
        pii tmp = dfs(v, u);
        res += tmp.fi;
        arr.push_back(tmp.se+c);
    }
    if (arr.empty()) return mp(0, 0);
    sort(arr.begin(), arr.end());

    int t = (isz(arr)-1)/2;
    for (int x : arr) res += abs(x-arr[t]);

    return mp(res, arr[t]);
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> N >> M;
    for (int i = 2; i <= N+M; i++){
        int p, c; cin >> p >> c;
        adj[i].push_back(mp(p, c));
        adj[p].push_back(mp(i, c));
    }
    cout << dfs(1, -1).fi;
    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...