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