Submission #1180161

#TimeUsernameProblemLanguageResultExecution timeMemory
1180161ByeWorldMagic Tree (CEOI19_magictree)C++20
27 / 100
141 ms40396 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") #define int long long #define ll long long #define pb push_back #define fi first #define se second #define lf (id<<1) #define rg ((id<<1)|1) #define md ((l+r)>>1) #define ld long double using namespace std; typedef pair<int,int> pii; typedef pair<int,pii> ipii; const int MAXN = 1e5+10; const int MAXA = 1e9; const int INF = 2e9+100; const int SQRT = 500; const int LOG = 19; const int MOD = 998244353; void chmn(auto &a, auto b){ a = min(a, b); } void chmx(auto &a, auto b){ a = max(a, b); } int sum(int a, int b){ a %= MOD; b %= MOD; return (a+b)%MOD; } void chsum(int &a, int b){ a %= MOD; b %= MOD; a = (a+b)%MOD; } void chsub(int &a, int b){ a %= MOD; b %= MOD; a = (a+MOD-b)%MOD; } int mul(int a, int b){ a %= MOD; b %= MOD; return a*b%MOD;} void chmul(int &a, int b){ a = a*b%MOD; } int expo(int a, int b){ if(b==0) return 1; int te = expo(a, b/2); te = mul(te, te); return (b%2 ? mul(te, a) : te); } int n, m, k, par[MAXN], d[MAXN], w[MAXN]; vector<int> adj[MAXN]; // from root decreasing days set<pii> s[MAXN]; void INS(int id, int d, int w){ auto it = s[id].lower_bound(pii(d,-1)); if(it!=s[id].end() && (*it).fi == d){ s[id].insert({d, w+(*it).se}); s[id].erase(it); } else { s[id].insert({d, w}); } // kurangin yg lebih gede it = s[id].lower_bound(pii(d+1,-1)); while(it!=s[id].end()){ if(w==0) break; auto it2 = it; it++; if((*it2).se <= w){ w -= (*it2).se; s[id].erase(it2); } else { s[id].insert(pii(it2->fi, it2->se-w)); w = 0; s[id].erase(it2); } } } void solve(int nw){ for(auto nx : adj[nw]){ solve(nx); if(s[nw].size() < s[nx].size()) swap(s[nw], s[nx]); for(auto in : s[nx]) s[nw].insert(in); } if(w[nw]!=0) INS(nw, d[nw], w[nw]); // cout << nw << " nwdone\n"; // for(auto [p,q] : s[nw]) cout << p << ' ' << q << " pq\n"; } signed main(){ // ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>m>>k; for(int i=2; i<=n; i++){ cin>>par[i]; adj[par[i]].pb(i); } vector<pii> vec; for(int i=1; i<=m; i++){ int id, day, wei; cin>>id>>day>>wei; vec.pb({day, id}); d[id] = day; w[id] = wei; } // cout << " tem\n"; solve(1); int tot = 0; for(auto [p, w] : s[1]) tot += w; cout << tot << '\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...