// 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];
std::set<std::pair<int, i64>> ss[max_N];
void merge(std::set<std::pair<int, i64>>& lhs, std::set<std::pair<int, i64>>& rhs) {
    if (lhs.size() < rhs.size()) {
        std::swap(lhs, rhs);
    }
    for (auto[d, x] : rhs) {
        auto it = lhs.upper_bound({d, -1});
        if (it == lhs.end() || it->first != d) {
            lhs.emplace(d, x);
        } else {
            i64 nx = it->second + x;
            lhs.erase(it);
            lhs.emplace(d, nx);
        }
    }
}
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];
    }
    for (int i = N - 1; i >= 1; --i) {
        if (D[i] != 0) {
            i64 now = 0;
            auto it = ss[i].lower_bound({D[i], -1});
            while (true) {
                if (it == ss[i].end()) {
                    ss[i].emplace(D[i], W[i]);
                    break;
                }
                if (now + it->second >= W[i]) {
                    auto[dit, xit] = *it;
                    ss[i].erase(it);
                    ss[i].emplace(dit, now + xit - W[i]);
                    ss[i].emplace(D[i], W[i]);
                    break;
                } else {
                    it = ss[i].erase(it);
                    now += it->second;
                }
            }
        }
        debug(i, ss[i]);
        merge(ss[P[i]], ss[i]);
    }
    i64 ans = 0;
    for (auto[d, w] : ss[0]) {
        ans += w;
    }
    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... |