#include <bits/stdc++.h>
using namespace std;
const int N = 21;
int dp[N][N], timp[N], weight[N];
vector<int> vec[N];
void dfs(int nod) {
for (auto i : vec[nod])
dfs(i);
for (auto i : vec[nod])
for (int j = 0; j < N; j ++)
dp[nod][j] += dp[i][j];
int sus = dp[nod][timp[nod]] + weight[nod];
for (int i = timp[nod]; i < N; i ++)
dp[nod][i] = max(dp[nod][i], sus);
}
signed main() {
int n, m, k;
cin >> n >> m >> k;
for (int i = 2; i <= n; i ++) {
int p;
cin >> p;
vec[p].push_back(i);
}
for (int i = 0; i < m; i ++) {
int v, d, w;
cin >> v >> d >> w;
timp[v] = d;
weight[v] = w;
}
dfs(1);
cout << dp[1][N - 1] << '\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... |