#include <bits/stdc++.h>
int n;
std::vector<int> p, w;
std::vector<std::vector<int>> adj;
void init(std::vector<int> P, std::vector<int> W) {
p = P, w = W, adj.resize(n = int(p.size()));
for (int i = 1; i < n; ++i) {
adj[p[i]].push_back(i);
}
}
long long query(int L, int R) {
std::vector<int64_t> c(n);
auto dfs = [&](auto &&self, int u) -> int64_t {
if (adj[u].empty()) {
return c[u] = L;
}
int64_t sum = 0;
for (int &i : adj[u]) {
sum += self(self, i);
}
if (sum > R) {
c[u] = sum - R;
sum = R;
}
return sum;
};
dfs(dfs, 0);
int64_t ans = 0;
for (int i = 0; i < n; ++i) {
ans += w[i] * std::abs(c[i]);
}
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... |