Submission #1184861

#TimeUsernameProblemLanguageResultExecution timeMemory
1184861UnforgettableplMagic Tree (CEOI19_magictree)C++20
100 / 100
76 ms31556 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,m,k; cin >> n >> m >> k; vector<vector<int>> adj(n+1); for(int i=2;i<=n;i++){ int p;cin>>p; adj[p].emplace_back(i); } vector<int> w(n+1); vector<int> d(n+1); for(int i=1;i<=m;i++){ int v,dd,ww;cin>>v>>dd>>ww; w[v]=ww; d[v]=dd; } auto combine = [&](map<int,int> &a,map<int,int> &b){ if(a.size()<b.size())swap(a,b); for(auto[i,j]:b){ a[i]+=j; } }; function<map<int,int>(int)> dfs = [&](int x){ map<int,int> DP; for(int&i:adj[x]){ auto t = dfs(i); combine(DP,t); } if(d[x]){ // is a fruit DP[d[x]]+=w[x]; auto iter = DP.upper_bound(d[x]); while(iter!=DP.end() and w[x]){ int trans = min(iter->second,w[x]); w[x]-=trans; iter->second-=trans; if(iter->second==0)iter=DP.erase(iter); else break; } } return DP; }; auto ans = dfs(1); int anss = 0; for(auto[i,j]:ans)anss+=j; cout << anss << '\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...