#include <bits/stdc++.h>
#define int long long
using namespace std;
const int nmax = 1e5;
int n, m, k;
int t[nmax + 5];
vector<int> G[nmax + 5];
int d[nmax + 5], val[nmax + 5];
int dp[nmax + 5][25];
void dfs(int nod)
{
for(auto it : G[nod])
{
dfs(it);
}
for(auto it : G[nod])
{
for(int i=1;i<=k;i++)
{
dp[nod][i] += dp[it][i];
}
}
if(d[nod])
{
dp[nod][d[nod]] += val[nod];
int poz = d[nod] + 1;
while(poz <= k && dp[nod][d[nod]] > dp[nod][poz])
{
dp[nod][poz] = dp[nod][d[nod]];
++poz;
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
#ifdef home
freopen("nr.in","r",stdin);
freopen("nr.out","w",stdout);
#endif // home
cin>>n>>m>>k;
for(int i=2;i<=n;i++)
{
cin>>t[i];
G[t[i]].push_back(i);
}
for(int i=1;i<=m;i++)
{
int nod;
cin>>nod;
cin>>d[nod]>>val[nod];
}
dfs(1);
cout<<dp[1][k]<<'\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... |