Submission #945574

#TimeUsernameProblemLanguageResultExecution timeMemory
945574vjudge1Magic Tree (CEOI19_magictree)C++17
0 / 100
199 ms7516 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_; } int opt = 0; for ( int mask = 0; mask < 1 << n; mask++ ){ vector <int> dp(n); int cnt = 0; for ( int i = 0; i < n; i++ ){ if ( mask >> i & 1 ){ dp[i] = d[i]; cnt += w[i]; } } auto dfs = [&](auto dfs, int u) -> bool{ bool ret = true; int mx = 0; for ( auto &v: G[u] ){ ret &= dfs(dfs, v); chmax(mx, dp[v]); } if ( mx > dp[u] && (mask >> u & 1)){ ret = false; } return ret; }; chmax(opt, dfs(dfs, 0) * cnt); } cout << opt; 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...