Submission #945577

#TimeUsernameProblemLanguageResultExecution timeMemory
945577vjudge1Magic Tree (CEOI19_magictree)C++17
34 / 100
497 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define ar array #define pb push_back #define ln '\n' #define int long long using i64 = long long; template <class F, class _S> bool chmin(F &u, const _S &v){ bool flag = false; if ( u > v ){ u = v; flag |= true; } return flag; } template <class F, class _S> bool chmax(F &u, const _S &v){ bool flag = false; if ( u < v ){ u = v; flag |= true; } return flag; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); 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].pb(i); } vector <int> w(n), d(n); for ( int i = 0; i < m; i++ ){ int d_, v, w_; cin >> v >> d_ >> w_; --v; w[v] = w_; d[v] = d_; } vector <vector<int>> dp(n, vector <int> (k + 1)); auto dfs = [&](auto dfs, int u) -> void{ for ( auto &v: G[u] ){ dfs(dfs, v); } for ( int j = 1; j <= k; j++ ){ int opt = 0; for ( auto &v: G[u] ){ opt += dp[v][j]; } chmax(dp[u][j], dp[u][j - 1]); if ( j <= d[u] ){ chmax(dp[u][d[u]], opt + w[u]); } chmax(dp[u][j], opt); } }; dfs(dfs, 0); cout << dp[0][k]; cout << '\n'; }
#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...