#include "tree.h"
#include <bits/stdc++.h>
using namespace std;
vector<long long> adj[200001];
long long arr[200001],arr2[200001];
void dfs(long long i,long long& res,long long l,long long r)
{
long long sum=0;
for(auto it : adj[i])
{
dfs(it,res,l,r);
sum+=arr2[it];
}
if(adj[i].size()==0)
{
sum=l;
res+=l*arr[i];
}
if(sum>r)
{
long long br=sum-r;
sum=r;
res+=br*arr[i];
}
arr2[i]=sum;
}
void init(std::vector<int> P, std::vector<int> W) {
for(int i=1;i<P.size();i++)
{
adj[P[i]].push_back(i);
arr[i]=W[i];
}
arr[0]=W[0];
}
long long query(int L, int R)
{
long long res=0;
dfs(0,res,L,R);
return res;
}
# | 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... |