Submission #1273602

#TimeUsernameProblemLanguageResultExecution timeMemory
1273602mkkkkkkkkTree (IOI24_tree)C++20
0 / 100
2095 ms27656 KiB
#include "tree.h"
#include <bits/stdc++.h>

using namespace std;

vector<long long> adj[200001];
long long arr[200001],arr2[200001];


void dfs(long long i,long long& res,long long l,long long r)
{
    long long sum=0;
    for(auto it : adj[i])
    {
        dfs(it,res,l,r);
        sum+=arr2[it];
    }
    if(adj[i].size()==0)
    {
        sum=l;
        res+=l*arr[i];
    }
    if(sum>r)
    {
        long long br=sum-r;
        sum=r;
        res+=br*arr[i];
    }
    arr2[i]=l;
}

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

}

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