Submission #1300459

#TimeUsernameProblemLanguageResultExecution timeMemory
1300459MinhKienBiochips (IZhO12_biochips)C++20
100 / 100
222 ms5964 KiB
#include <iostream>
#include <vector>

using namespace std;

const int N = 2e5 + 10;
const int M = 510;

int n, k, u, a[N];
int root, dp[N][2];
int in[N], out[N], cnt;
vector <int> v[N];

void DFS(int s) {
    in[s] = ++cnt;
    for (int z: v[s]) DFS(z);
    out[s] = cnt;
}

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

    cin >> n >> k;
    for (int i = 1; i <= n; ++i) {
        cin >> u >> a[i];
        if (u == 0) root = i;
        else v[u].push_back(i);
    }

    DFS(root);

    for (int x = 1; x <= k; ++x) {
        for (int i = 1; i <= n; ++i) {
            dp[out[i]][1] = max(dp[out[i]][1], dp[in[i] - 1][0] + a[i]);
        }

        for (int i = 1; i <= n; ++i) {
            dp[i][0] = max(dp[i][1], dp[i - 1][0]);
            dp[i][1] = -1e9;
        }
        dp[0][0] = -1e9;
    }

    cout << dp[n][0] << "\n";

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...