Submission #1363132

#TimeUsernameProblemLanguageResultExecution timeMemory
1363132activedeltorreTree (IOI24_tree)C++20
0 / 100
2097 ms23548 KiB
#include "tree.h"
#include <cassert>
#include <cstdio>
#include <vector>

using namespace std;
int n;
std::vector<int> p, w;
vector<int>adj[200005];
long long dim[200005];
long long dfs(int curr,int L,int R)
{
    dim[curr]=0;
    if(adj[curr].size()==0)
    {
        dim[curr]=L;
        return L*w[curr];
    }
    long long cost=0;
    for(auto k:adj[curr])
    {
        cost+=dfs(k,L,R);
        dim[curr]+=dim[k];
    }
    if(dim[curr]>R)
    {
        long long diff=dim[curr]-R;
        dim[curr]=R;
        cost+=diff*w[curr];
    }
    return cost;
}
void init(std::vector<int> P, std::vector<int> W)
{
    p = P;
    w = W;
    n = (int)p.size();
    for(int i=1;i<n;i++)
    {
        adj[P[i]].push_back(i);
    }
}

long long query(int L, int R)
{
    return dfs(0,L,R);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...