제출 #1237121

#제출 시각아이디문제언어결과실행 시간메모리
1237121ericl23302트리 (IOI24_tree)C++20
0 / 100
2096 ms22944 KiB
#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 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...