#include <bits/stdc++.h>
#define F first
#define S second
#define int long long
#define pb push_back
using namespace std;
const int N = 2e5 + 10;
const int inf = 1e16;
const int mod = 998244353;
vector<int> g[N];
int d[N], w[N], dp[N][21];
void Dfs(int x, int p) {
for(int j : g[x]) {
if(j != p) {
Dfs(j, x);
}
}
for(int j = 1; j <= 20; j++) {
int sum = 0;
for(int i : g[x]) {
if(i != p) sum += dp[i][j];
}
dp[x][j] = max(dp[x][j - 1], sum + (d[x] == j ? w[x] : 0));
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m, k;
cin >> n >> m >> k;
for(int i = 2; i <= n; i++) {
int x;
cin >> x;
g[x].pb(i);
}
for(int i = 1; i <= m; i++) {
int u, dd, ww;
cin >> u >> dd >> ww;
d[u] = dd;
w[u] = ww;
}
Dfs(1,0);
cout << dp[1][k];
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... |