Submission #1236400

#TimeUsernameProblemLanguageResultExecution timeMemory
1236400dssfsuper2Magic Tree (CEOI19_magictree)C++20
100 / 100
841 ms30144 KiB
#include <bits/stdc++.h> using namespace std; #define int long long using pii = pair<int, int>; #define all(x) (x).begin(), (x).end() vector<int> values; vector<int> days; vector<vector<int>> adj; map<int, int> dpf(int node){ map<int, int> mmap; for(auto thing:adj[node]){ auto x = dpf(thing); if(x.size()>mmap.size())swap(x, mmap); for(auto thing:x)mmap[thing.first]+=thing.second; } if(values[node]!=0){ mmap[days[node]]+=values[node]; int x = 0; auto it = mmap.upper_bound(days[node]); while(it!=mmap.end() && x<values[node]){ x+=(*it).second; if(x<values[node])mmap[(*it).first]=0; else it->second=x-values[node]; it++; } } //cout << node << '\n'; //for(auto thing:mmap)cout << thing.first << ' ' << thing.second << '\n'; return mmap; } void solve(){ int n, m, k;cin>>n>>m>>k; values.assign(n+1, 0); days.assign(n+1, 0); adj.resize(n+1); for(int i = 2;i<=n;i++){ int p;cin>>p; adj[p].push_back(i); } for(int i = 0;i<m;i++){ int v, d, w;cin>>v>>d>>w; values[v]=w; days[v]=d; } auto x = dpf(1); int res=0; for(auto thing:x)res+=thing.second; cout << res << '\n'; } signed main(){ ios_base::sync_with_stdio(false);cin.tie(0); int t = 1; while (t--) { solve(); } }
#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...