Submission #1279294

#TimeUsernameProblemLanguageResultExecution timeMemory
1279294MisterReaperMagic Tree (CEOI19_magictree)C++20
6 / 100
564 ms1114112 KiB
// File magictree.cpp created on 14.10.2025 at 21:08:14
#include <bits/stdc++.h>

using i64 = long long;

#ifdef DEBUG 
    #include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
    #define debug(...) void(23)
#endif

constexpr int max_N = int(1E5) + 5;

int N, M, K;
int P[max_N];
int D[max_N];
int W[max_N];

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin >> N >> M >> K;

    for (int i = 1; i < N; ++i) {
        std::cin >> P[i];
        --P[i];
    }

    for (int i = 0; i < M; ++i) {
        int V;
        std::cin >> V;
        --V;
        std::cin >> D[V] >> W[V];
        --D[V];
    }

    std::vector<std::vector<i64>> f(N, std::vector<i64>(K));

    for (int v = N - 1; v >= 1; --v) {
        if (D[v] != -1) {
            f[v][D[v]] += W[v];
            for (int i = 1; i < K; ++i) {
                f[v][i] = std::max(f[v][i], f[v][i - 1]);
            }
        }
        debug(v, f[v]);
        for (int i = 0; i < K; ++i) {
            f[P[v]][i] += f[v][i];
        }
    }

    i64 ans = f[0][K - 1];

    std::cout << ans << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...