#include <bits/stdc++.h>
#include "tree.h"
using namespace std;
using ll = long long;
vector <ll> adj[200005];
vector <ll> weight;
ll sm=0;
ll dfs(ll l, ll r, ll node){
ll cursum=0;
ll amount=0;
for (auto x : adj[node]){
cursum+=dfs(l,r,x);
}
if (cursum<l){
amount=l-cursum;
sm+=weight[node]*amount;
return l;
}
if (cursum>r){
amount=cursum-r;
sm+=weight[node]*amount;
return r;
}
return cursum;
}
void init(vector<int> P, vector<int> W){
for (int i=0; i<W.size(); i++){
weight.push_back(W[i]);
}
for (int i=1; i<P.size(); i++){
adj[P[i]].push_back(i);
}
}
ll query(int L, int R){
sm=0;
dfs(L,R,0);
return sm;
}
| # | 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... |