제출 #1231574

#제출 시각아이디문제언어결과실행 시간메모리
1231574bangan트리 (IOI24_tree)C++20
10 / 100
2096 ms20388 KiB
#include "tree.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define ll long long

const int N = 200200;

int n;
std::vector<int> w;
vector<int> adj[N];

ll res;
ll dfs(int v, ll l, ll r) {
    if (adj[v].empty()) {
        res += l * w[v];
        return l;
    }
    ll sum = 0;
    for (int u : adj[v]) sum += dfs(u, l, r);
    assert(l <= sum);
    
    ll t = max(0ll, sum - r);
    res += t * w[v];
    return sum - t;
}

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

long long query(int L, int R) {
    res = 0;
    dfs(0, L, R);
    return res;
}
#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...