#include "tree.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
std::vector<int> p, w;
vector<vector<int>> adjacency;
void init(std::vector<int> P, std::vector<int> W) {
p = P;
w = W;
n = (int)p.size();
adjacency.resize(n);
for (int i = 1; i < n; ++i) adjacency[p[i]].push_back(i);
}
pair<ll, ll> recurse(int cur, int l, int r) {
if (adjacency[cur].size() == 0) return {l, l * w[cur]};
ll tot = 0, res = 0;
for (auto &child : adjacency[cur]) {
auto curRes = recurse(child, l, r);
tot += curRes.first;
res += curRes.second;
}
if (tot > r) res += (tot - r) * w[cur], tot = r;
return {tot, res};
}
long long query(int L, int R) {
return recurse(0, L, R).second;
}
# | 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... |