Submission #1241653

#TimeUsernameProblemLanguageResultExecution timeMemory
1241653alexaaaTree (IOI24_tree)C++20
0 / 100
2096 ms14632 KiB
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<stack>

using namespace std;
vector<int> w;
vector<int> children;
vector<vector<int>> adj_list;
int n;
void init(std::vector<int> P, std::vector<int> W){
    swap(W,w);
    n = P.size();
    adj_list.assign(P.size(),{});
    set<int> not_found;
    stack<int> stack;
    vector<bool> visited(P.size(),false);

    for(int i = 0; i < P.size(); i ++){
        if(P[i] != -1){
            adj_list[P[i]].push_back(i);

        }
        
    }
    stack.push(0);

    while(!stack.empty()){
        int u = stack.top();
        stack.pop();
        if(visited[u]){
            continue;
        }
        visited[u] = true;
        children.push_back(u);
        for(int i = 0; i < adj_list[u].size(); i++){
            int v = adj_list[u][i];
            if (!visited[v]){
                stack.push(v);
            } 

        }


    }
    
    
    

   

}
long long query(int L, int R){
    long long answer = 0;
    vector<int> sum(n);
    for(int i = children.size()-1; i >= 0; i--){
        int u = children[i];
        if(adj_list[u].size() == 0){
            sum[u] = L;
            answer += (L*w[u]);
        }
        else{
            long long total = 0;
            for(auto v : adj_list[u]){
                total+=sum[v];
            }
            if(total < R){
                sum[u] = total;
            }
            else{
                long long dif = R-total;
                answer += (abs(dif)*w[u]);
                sum[u] = total + dif;
            }

        }
        

    }
    return answer;
    
    
    
}
#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...