Submission #1176358

#TimeUsernameProblemLanguageResultExecution timeMemory
1176358juliany2Fireworks (APIO16_fireworks)C++20
7 / 100
4 ms7240 KiB
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(x) (x).begin(), (x).end()

const int N = 3e5 + 7;
int n, m;
vector<array<ll, 2>> adj[N];

// cost of dp[0], first slope change, second slope change
array<ll, 3> dfs(int v, ll d) {
    if (adj[v].empty())
        return {d, d, d};

    ll z = 0;
    vector<ll> c;

    for (auto &[u, w] : adj[v]) {
        array<ll, 3> t = dfs(u, d + w);
        z += t[0];
        c.push_back(t[1]);
        c.push_back(t[2]);
    }

    sort(all(c));

    int h = c.size() / 2;
    for (int i = 0; i < h; i++)
        z -= c[i];

    z += c[h - 1];

    return {z, c[h - 1], c[h]};
}

int main() {
    cin.tie(0)->sync_with_stdio(false);

    cin >> n >> m;

    for (int i = 2; i <= n + m; i++) {
        int p, w;
        cin >> p >> w;
        adj[p].push_back({i, w});
    }

    array<ll, 3> res = dfs(1, 0);

    cout << res[0] - res[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...