제출 #1202047

#제출 시각아이디문제언어결과실행 시간메모리
1202047HasanV11010238Magic Tree (CEOI19_magictree)C++20
100 / 100
144 ms39572 KiB
#include<bits/stdc++.h> #define ll long long #define INF 10000000 #define MAX 1500000 using namespace std; vector<map<int, ll>> ma; vector<vector<int>> v, fru; void dfs(int x){ for (auto el : v[x]){ dfs(el); if (ma[x].size() < ma[el].size()){ swap(ma[x], ma[el]); } for (auto el : ma[el]){ ma[x][el.first] += el.second; } } if (fru[x][0] != -1){ ll cw = fru[x][1], ad = fru[x][0]; ma[x][ad] += cw; while (1){ auto it = ma[x].upper_bound(ad); if (it == ma[x].end()) break; int tt = it->first; if (ma[x][tt] <= cw){ cw -= it->second; ma[x].erase(it); } else{ ma[x][tt] -= cw; break; } } } } int main(){ int n, m, k, a; cin>>n>>m>>k; v.assign(n + 1, vector<int>()), ma.assign(n + 1, map<int, ll>()), fru.assign(n + 1, vector<int>(2, 0)); for (int i = 2; i <= n; i++){ cin>>a; v[a].push_back(i); } for (int i = 0; i < m; i++){ cin>>a; cin>>fru[a][0]>>fru[a][1]; } dfs(1); ll ans = 0; for (auto el : ma[1]){ ans += el.second; } cout<<ans<<"\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...