#include "tree.h"
#include "bits/stdc++.h"
using namespace std;
#define vec vector
#define int long long
#define all(x) (x).begin(), (x).end()
const int mod = 1e9 + 7;
const int inf = 1e18;
using pii = pair<int, int>;
template<typename T>
void print(const vec<T> &a) {
for(auto x: a) cerr << x << " ";
cerr << endl;
}
int n;
vec<int> p, w;
void init(vec<signed> P, vec<signed> W) {
n = P.size();
p.resize(n);
w.resize(n);
for(int i = 0; i < n; i++) p[i] = P[i], w[i] = W[i];
}
int query(signed L, signed R) {
int l = L, r = R;
vec<int> sum(n, 0);
vec<int> ans(n);
vec<int> deg(n, 0);
for(int i = 0; i < n; i++) if (p[i] != -1) deg[p[i]]++;
queue<int> leaves;
for (int i = 0; i < n; i++) if (deg[i] == 0) leaves.push(i);
while (leaves.size()) {
auto i = leaves.front();
leaves.pop();
if (sum[i] < l) ans[i] = l - sum[i], sum[i] = l;
else if (sum[i] >= l && sum[i] <= r) ans[i] = 0;
else if (sum[i] > r) ans[i] = r - sum[i], sum[i] = r;
if (p[i] != -1) {
sum[p[i]] += sum[i];
deg[p[i]]--;
if (deg[p[i]] == 0) leaves.push(p[i]);
}
}
int cost = 0;
for(int i = 0; i < n; i++) cost += abs(ans[i]) * w[i];
return cost;
}
// signed main() {
// init({-1, 0, 0}, {1, 1, 1});
// cout << query(1, 1) << endl;
// cout << query(1, 2) << endl;
// }
# | 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... |