제출 #1367263

#제출 시각아이디문제언어결과실행 시간메모리
1367263aaaaaaaa트리 (IOI24_tree)C++20
10 / 100
2094 ms27404 KiB
#include <bits/stdc++.h>
#include "tree.h"

using namespace std;

const int mxN = 2e5 + 100;

vector <int> adj[mxN];
long long w[mxN];

pair <long long, long long> dfs (int u, int par, int l, int r) {
    long long ans = 0, csm = 0;
    for (auto v : adj[u]) {
        if (v ^ par) {
            auto x = dfs (v, u, l, r);
            ans += x.first * 1LL, csm += x.second * 1LL;
        }
    }
    long long ncost = abs (l - csm), ntotal = l;
    if (csm <= r) ncost = 0, ntotal = csm;
    if (csm < l) ncost = l - csm, ntotal = l;
    if (csm > r) ncost = abs(r - csm), ntotal = r;
    return {ans * 1LL + ncost * w[u] * 1LL, ntotal};
}

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

long long query(int L, int R) {
  return dfs(0, 0, L, R).first;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…