#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |