제출 #1211335

#제출 시각아이디문제언어결과실행 시간메모리
1211335sula2트리 (IOI24_tree)C++20
0 / 100
2096 ms22176 KiB
#include <bits/stdc++.h>
#define all(a) a.begin(), a.end()
#define popcount(x) __builtin_popcountll(x)
using namespace std;
using namespace chrono;

vector<int> adj[200000];
int W[200000], n;

void init(vector<int> P, vector<int> a) {
    n = P.size();
    for (int i = 1; i < n; i++) {
        adj[P[i]].push_back(i);
    }
    for (int i = 0; i < n; i++) {
        W[i] = a[i];
    }
}

pair<long long, long long> solve(int L, int R, int u = 0) {
    long long ans = 0, sum = 0;
    for (int v : adj[u]) {
        auto [_ans, _sum] = solve(L, R, v);
        ans += _ans;
        sum += _sum;
    }
    // Make it L
    int C1 = L - sum;
    // Make it R
    int C2 = R - sum;
    if (abs(C1) < abs(C2))
        return {ans + abs(C1)*W[u], L};
    else
        return {ans + abs(C2)*W[u], R};
}

long long query(int L, int R) {
    return solve(L, R).first;
}
#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...