Submission #1210736

#TimeUsernameProblemLanguageResultExecution timeMemory
1210736AvianshTree (IOI24_tree)C++20
0 / 100
2093 ms26528 KiB
#include "tree.h"

#include <bits/stdc++.h>

using namespace std;

int n;
vector<int> p, w;
vector<vector<int>>g;

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

long long dfs(int st, int l, int r, long long c[]){
    long long belsum = 0;
    if(g[st].size()==0){
        c[st]=l;
        return l;
    }
    for(int i : g[st]){
        belsum+=dfs(i,l,r,c);
    }
    if(w[st]==1||st==0){
        c[st]=0;
        if(belsum>r){
            c[st]=-(belsum-r);
            belsum+=c[st];
        }
        return belsum;
    }
    c[st]=0;
    if(belsum>l){
        c[st]=-(belsum-l);
        belsum+=c[st];
    }
    return belsum;
}

long long query(int L, int R) {
    long long C[n];
    dfs(0,L,R,C);
    long long ans = 0;
    for(int i = 0;i<n;i++){
        ans+=abs(C[i]*w[i]);
    }
    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...