Submission #1246903

#TimeUsernameProblemLanguageResultExecution timeMemory
1246903KindaGoodGamesMagic Tree (CEOI19_magictree)C++20
34 / 100
570 ms1114112 KiB
#include<bits/stdc++.h>

using namespace std;
#define int long long
#define pii pair<int,int>

int n, m, k;
vector<pii> fruits;
vector<vector<int>> adj;

vector<vector<int>> dp;
void DFS(int v, int p){
    for(auto u : adj[v]){
        if(u == p) continue;
        DFS(u,v);
    }

    for(int t = 1; t <= k; t++){
        int s = 0;
        for(auto u : adj[v]){
            s += dp[t][u];
        }

        int add = 0;
        if(t == fruits[v].first){
            add += fruits[v].second;
        }
        dp[t][v] = max(s + add, dp[t-1][v]);
    }
}

int32_t main(){
    cin >> n >> m >> k;

    adj.resize(n);
    fruits.resize(n);

    for(int i = 1; i < n; i++){
        int p;
        cin >> p;
        p--;
        adj[i].push_back(p);
        adj[p].push_back(i);
    }

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

    dp.resize(k+1, vector<int>(n));
    DFS(0,0);
    cout << dp[k][0] << endl;
}
#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...