Submission #1266583

#TimeUsernameProblemLanguageResultExecution timeMemory
1266583vtnooMagic Tree (CEOI19_magictree)C++20
100 / 100
139 ms34412 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN=100000; vector<int> adj[MAXN]; map<long long, long long> dp[MAXN]; pair<int,int> fruit[MAXN]; void dfs(int u){ for(auto v:adj[u]){ dfs(v); if(dp[u].size()<dp[v].size()){ swap(dp[u], dp[v]); } for(auto [key, value]:dp[v]){ dp[u][key]+=value; } } auto [time, sum]=fruit[u]; if(time!=0){ dp[u][time]+=sum; while(true){ auto it=dp[u].upper_bound(time); if(it==dp[u].end())break; if(it->second<=sum){ sum-=it->second; dp[u].erase(it); }else{ dp[u][it->first]-=sum; break; } } } } int main(){ int n,m,k;cin>>n>>m>>k; for(int i=1;i<n;i++){ int pi;cin>>pi; pi--; adj[pi].push_back(i); } for(int i=0;i<m;i++){ int v,d,w;cin>>v>>d>>w; v--; fruit[v]={d,w}; } dfs(0); long long ans=0; for(auto [time, value]:dp[0]){ ans+=value; } cout<<ans<<endl; }
#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...