Submission #1185999

#TimeUsernameProblemLanguageResultExecution timeMemory
1185999gyg트리 (IOI24_tree)C++20
10 / 100
2096 ms22944 KiB
#include "tree.h"
#include <bits/stdc++.h>
using namespace std;
#define sig signed
#define int long long
#define arr array 
#define vec vector 
#define pii pair<int, int>
#define fir first
#define sec second
const int N = 2e5 + 5;

int n;
arr<vec<int>, N> ch;
arr<int, N> wg;

void init(vec<sig> _pr, vec<sig> _wg) {
    n = _pr.size();
    for (int u = 1; u <= n; u++)
        ch[_pr[u - 1] + 1].push_back(u);
    for (int u = 1; u <= n; u++)
        wg[u] = _wg[u - 1];
}

arr<int, N> vl;
int dfs(int l, int r, int u = 1) {
    if (ch[u].empty()) { vl[u] = l; return l; }
    
    int sm = 0;
    for (int v : ch[u]) 
        sm += dfs(l, r, v);
    
    if (sm > r) {
        vl[u] = -(sm - r);
        sm = r;
    }
    return sm;
}

int query(sig l, sig r) {
    vl.fill(0);
    dfs(l, r);

    int ans = 0;
    for (int u = 1; u <= n; u++) ans += abs(vl[u]) * wg[u];
    return ans;
}
#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...