제출 #1245130

#제출 시각아이디문제언어결과실행 시간메모리
1245130PlayVoltzMagic Tree (CEOI19_magictree)C++20
100 / 100
118 ms35988 KiB
#include <cstdio> #include <stdio.h> #include <stdbool.h> #include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> #include <cstring> #include <numeric> #include <cassert> #include <random> #include <chrono> #include <fstream> using namespace std; #define int long long #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second vector<pii> vect; vector<vector<int> > graph; vector<map<int, int> > s; void dfs(int node){ for (auto num:graph[node]){ dfs(num); if (s[num].size()>s[node].size())swap(s[num], s[node]); for (auto a:s[num])s[node][a.fi]+=a.se; } if (vect[node].fi==-1)return; s[node][vect[node].fi]+=vect[node].se; int c=vect[node].se; while (1){ auto it=s[node].upper_bound(vect[node].fi); if (it==s[node].end())break; if (c>=it->se)c-=it->se, s[node].erase(it); else{ it->se-=c; break; } } } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, k, a, ans=0; cin>>n>>m>>k; graph.resize(n+1); s.resize(n+1); vect.resize(n+1, mp(-1, -1)); for (int i=2; i<=n; ++i)cin>>a, graph[a].pb(i); while (m--)cin>>a>>vect[a].fi>>vect[a].se; dfs(1); for (auto a:s[1])ans+=a.se; cout<<ans; }
#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...