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