Submission #1311912

#TimeUsernameProblemLanguageResultExecution timeMemory
1311912eri16트리 (IOI24_tree)C++20
10 / 100
2096 ms20740 KiB
#include <bits/stdc++.h>
#include "tree.h"
using namespace std;

using ll = long long;

vector <ll> adj[200005];
vector <ll> weight;

ll sm=0;

ll dfs(ll l, ll r, ll node){
    
    ll cursum=0;
    ll amount=0;
    
    for (auto x : adj[node]){
        cursum+=dfs(l,r,x);
    }
    
    if (cursum<l){
        amount=l-cursum;
        sm+=weight[node]*amount;
        return l;
    }
    if (cursum>r){
        amount=cursum-r;
        sm+=weight[node]*amount;
        return r;
    }
    
    return cursum;
}

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

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