Submission #1216418

#TimeUsernameProblemLanguageResultExecution timeMemory
1216418hengliaoTree (IOI24_tree)C++20
10 / 100
2096 ms30312 KiB
#include "tree.h" #include<bits/stdc++.h> using namespace std; #define F first #define S second #define pll pair<ll, ll> #define vll vector<ll> #define pb push_back typedef long long ll; namespace{ const ll mxN=2e5+5; ll n, l, r; ll sum[mxN]; multiset<pll> st[mxN]; ll ans; ll p[mxN]; vll adj[mxN]; ll w[mxN]; ll leafcnt; ll f, s; void dfs(ll cur){ if(adj[cur].empty()){ sum[cur]=l; ans+=w[cur]*l; return; } sum[cur]=0; for(auto &chd:adj[cur]){ dfs(chd); sum[cur]+=sum[chd]; } if(sum[cur]>r) ans+=(sum[cur]-r)*w[cur]; sum[cur]=min(sum[cur], r); } } void init(std::vector<int> P, std::vector<int> W) { n=W.size(); for(ll i=1;i<n;i++){ p[i]=P[i]; adj[p[i]].pb(i); } for(ll i=0;i<n;i++){ w[i]=W[i]; } // leafcnt=0; // for(ll i=0;i<n;i++){ // if(adj[i].empty()){ // f+=w[i]; // } // } // for(ll i=0;i<n;i++){ // if(!adj[i].empty()){ // s+=w[i]*((ll) adj[i].size()-1); // } // } } long long query(int L, int R) { l=L; r=R; ans=0; dfs(0); return 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...