#include<iostream>
#include<algorithm>
#include<vector>
#include "tree.h"
using namespace std;
const int MAX_N=2e5+5;
long long w[MAX_N];
vector<int>g[MAX_N];
int deg[MAX_N];
long long sumcoef[MAX_N];
int n;
long long l,r;
long long ans;
void dfs(int u)
{
for(int v:g[u])
{
dfs(v);
sumcoef[u]+=sumcoef[v];
}
if(deg[u]==0)
{
sumcoef[u]=l;
ans+=l*w[u];
}
else
{
if(sumcoef[u]>r)
{
long long dif=sumcoef[u]-r;
ans+=dif*w[u];
sumcoef[u]=r;
}
}
}
void init(std::vector<int> P, std::vector<int> W)
{
n=P.size();
w[0]=W[0];
for(int i=1;i<n;i++)
{
w[i]=W[i];
deg[P[i]]++;
g[P[i]].push_back(i);
}
}
long long query(int L, int R)
{
l=L;
r=R;
ans=0;
for(int i=0;i<n;i++)sumcoef[i]=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... |