Submission #1184853

#TimeUsernameProblemLanguageResultExecution timeMemory
1184853UnforgettableplMagic Tree (CEOI19_magictree)C++20
34 / 100
2093 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long


int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,m,k;
    cin >> n >> m >> k;
    vector<vector<int>> adj(n+1);
    for(int i=2;i<=n;i++){
        int p;cin>>p;
        adj[p].emplace_back(i);
    }
    vector<int> w(n+1);
    vector<int> d(n+1);
    for(int i=1;i<=m;i++){
        int v,dd,ww;cin>>v>>dd>>ww;
        w[v]=ww;
        d[v]=dd;
    }
    function<vector<int>(int)> dfs = [&](int x){
        vector<int> DP(k+1);
        for(int&i:adj[x]){
            auto t = dfs(i);
            for(int j=1;j<=k;j++)DP[j]+=t[j];
        }
        if(d[x]){ // is a fruit
            int base = w[x]+DP[d[x]];
            for(int i=d[x];i<=k;i++)DP[i]=max(DP[i],base);
        }
        return DP;
    };
    cout << dfs(1)[k] << '\n';
}
#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...