Submission #833823

#TimeUsernameProblemLanguageResultExecution timeMemory
833823MilosMilutinovicMagic Tree (CEOI19_magictree)C++14
34 / 100
473 ms1048576 KiB
/** * author: wxhtzdy * created: 22.08.2023 09:39:57 **/ #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m, k; cin >> n >> m >> k; vector<vector<int>> g(n); for (int i = 1; i < n; i++) { int p; cin >> p; --p; g[p].push_back(i); } vector<int> x(n, -1), y(n); for (int i = 0; i < m; i++) { int v, d, w; cin >> v >> d >> w; --v; --d; x[v] = d; y[v] = w; } vector<vector<long long>> dp(n, vector<long long>(k)); /* vector<int> f(n); auto Insert = [&](int v, int d, int val) { long long s = 0; for (auto& p : dp[f[v]]) { if (p.first < d) { s += p.first; if (s > val) { break; } } else { break; } } if (s <= val) { while (!dp[f[v]].empty() && dp[f[v]].begin()->first < d) { dp[f[v]].erase(dp[f[v]].begin()); } dp[f[v]].emplace(d, val); } }; */ function<void(int)> Solve = [&](int v) { for (int u : g[v]) { Solve(u); } for (int u : g[v]) { for (int i = 0; i < k; i++) { long long mx = 0; for (int j = 0; j <= i; j++) { mx = max(mx, dp[u][j]); } dp[v][i] += mx; } } if (x[v] != -1) { dp[v][x[v]] += y[v]; } }; Solve(0); cout << *max_element(dp[0].begin(), dp[0].end()) << '\n'; 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...