Submission #1237124

#TimeUsernameProblemLanguageResultExecution timeMemory
1237124ericl23302Tree (IOI24_tree)C++20
10 / 100
2096 ms23184 KiB
#include "tree.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int n;
std::vector<ll> w;
vector<vector<int>> adjacency;

void init(std::vector<int> P, std::vector<int> W) {
    for (auto &i : W) w.push_back(i);
    n = (int)w.size();
    adjacency.resize(n);
    for (int i = 1; i < n; ++i) adjacency[P[i]].push_back(i);
}

pair<ll, ll> recurse(int cur, ll l, ll 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...