Submission #723635

#TimeUsernameProblemLanguageResultExecution timeMemory
723635dxz05Magic Tree (CEOI19_magictree)C++17
34 / 100
100 ms56012 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
#define all(x) (x).begin(), (x).end()
#define MP make_pair
const int N = 100500;

vector<int> g[N];

ll dp[N][30];
pair<int, int> fruit[N];

void dfs(int v){
    dp[v][fruit[v].first] = fruit[v].second;

    for (int u : g[v]){
        dfs(u);
    }

    for (int t = 1; t <= 20; t++){
        for (int u : g[v]){
            dp[v][t] += *max_element(dp[u], dp[u] + t + 1);
        }
    }
}

void solve(){
    int n, m, k;
    cin >> n >> m >> k;

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

    for (int i = 0; i < m; i++){
        int v, d, w;
        cin >> v >> d >> w;
        fruit[v] = MP(d, w);
    }

    dfs(1);

    cout << *max_element(dp[1], dp[1] + 30) << endl;

}

int main() {
    ios_base::sync_with_stdio(false);

#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif

    solve();

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