Submission #1185365

#TimeUsernameProblemLanguageResultExecution timeMemory
1185365woohyun_jngMagic Tree (CEOI19_magictree)C++20
100 / 100
83 ms37192 KiB
#include <bits/stdc++.h> #define int long long using namespace std; typedef array<int, 2> pr; const int MAX = 100001; int D[MAX], W[MAX]; vector<int> adj[MAX]; multiset<pr> dfs(int node) { multiset<pr> res, tmp; multiset<pr>::iterator iter; int X = 0; pr K; for (int i : adj[node]) { tmp = dfs(i); if (tmp.size() > res.size()) swap(res, tmp); for (pr j : tmp) res.insert(j); } if (D[node] != 0) { while (true) { iter = res.lower_bound({D[node] + 1, 0}); if (iter == res.end()) break; K = *iter, X += K[1], res.erase(iter); if (X > W[node]) { res.insert({K[0], X - W[node]}); break; } } res.insert({D[node], W[node]}); } return res; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); int N, M, K, X, Y, Z, ans = 0; cin >> N >> M >> K; for (int i = 2; i <= N; i++) cin >> X, adj[X].push_back(i); while (M--) { cin >> X >> Y >> Z; D[X] = Y, W[X] = Z; } multiset<pr> ret = dfs(1); for (pr i : ret) ans += i[1]; 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...