Submission #1162271

#TimeUsernameProblemLanguageResultExecution timeMemory
1162271domblyMagic Tree (CEOI19_magictree)C++20
34 / 100
44 ms30792 KiB
#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 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...