Submission #1184866

#TimeUsernameProblemLanguageResultExecution timeMemory
1184866LuvidiTree (IOI24_tree)C++20
10 / 100
2096 ms21396 KiB
#include "tree.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long

const int maxn=2e5;
vector<int> ch[maxn];
ll ans;
vector<ll> w;
int n;

ll dfs(int v,ll l,ll r){
    ll x=0;
    for(int u:ch[v]){
        x+=dfs(u,l,r);
    }
    ll a=l-x,b=r-x,c;
    if(a>0)c=a;
    else if(b<0)c=b;
    else c=0;
    ans+=abs(c)*w[v];
    return x+=c;
}

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

long long query(int l, int r) {
    ans=0;
    dfs(0,l,r);
    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...