Submission #834060

#TimeUsernameProblemLanguageResultExecution timeMemory
834060MilosMilutinovicMagic Tree (CEOI19_magictree)C++14
100 / 100
121 ms34428 KiB
/** * author: wxhtzdy * created: 22.08.2023 12:12:51 **/ #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; x[v] = d; y[v] = w; } vector<set<pair<int, long long>>> dp(n); function<void(int)> Dfs = [&](int v) { int ch = -1; for (int u : g[v]) { Dfs(u); if (ch == -1 || (int) dp[u].size() > (int) dp[ch].size()) { ch = u; } } if (ch != -1) { swap(dp[v], dp[ch]); } for (int u : g[v]) { if (u == ch) { continue; } for (auto& p : dp[u]) { auto it = dp[v].lower_bound({p.first, -1LL}); if (it != dp[v].end() && it->first == p.first) { int fir = it->first; long long sec = it->second; dp[v].erase(it); dp[v].emplace(fir, sec + p.second); } else { dp[v].insert(p); } } } if (x[v] != -1) { auto it = dp[v].lower_bound({x[v], -1LL}); if (it != dp[v].end() && it->first == x[v]) { int fir = it->first; long long sec = it->second; dp[v].erase(it); dp[v].emplace(fir, sec + y[v]); } else { dp[v].emplace(x[v], y[v]); } long long s = 0; while (true) { auto it = dp[v].lower_bound({x[v] + 1, -1LL}); if (it == dp[v].end()) { break; } if (s + it->second <= y[v]) { s += it->second; dp[v].erase(it); } else { int fir = it->first; long long sec = it->second; dp[v].erase(it); dp[v].emplace(fir, sec - (y[v] - s)); break; } } } }; Dfs(0); long long ans = 0; for (auto& p : dp[0]) { ans += p.second; } cout << ans << '\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...