제출 #972833

#제출 시각아이디문제언어결과실행 시간메모리
972833phoenixMagic Tree (CEOI19_magictree)C++17
100 / 100
128 ms37968 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 100100; int n, m, k; int p[N]; int d[N]; int w[N]; map<int, ll> mp[N]; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> k; for (int i = 2; i <= n; i++) { cin >> p[i]; } for (int i = 0; i < m; i++) { int v; cin >> v; cin >> d[v] >> w[v]; } auto merge = [&](int u, int v) { if ((int)mp[u].size() < (int)mp[v].size()) swap(mp[u], mp[v]); for (auto c : mp[v]) mp[u][c.first] += c.second; }; for (int v = n; v >= 1; v--) { auto it = mp[v].upper_bound(d[v]); int s = w[v]; while (it != mp[v].end()) { if (it->second <= s) { s -= it->second; mp[v].erase(it); } else { mp[v][it->first] = it->second - s; break; } it = mp[v].upper_bound(d[v]); } mp[v][d[v]] += w[v]; merge(p[v], v); } ll s = 0; for (auto c : mp[0]) s += c.second; cout << s << '\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...