Submission #1245429

#TimeUsernameProblemLanguageResultExecution timeMemory
1245429CyberCowTree (IOI24_tree)C++20
10 / 100
2095 ms19360 KiB
#include "tree.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int n;
vector<int> p, w;
vector<int> v[200005];
ll l, r;
ll ans =0;

ll Dfs(int g)
{
  if(v[g].size() == 0)
  {
    ans += w[g] * l;
    return l;
  }  
  ll gg = 0;
  for(auto to: v[g])
  {
    gg+=Dfs(to);
  }
  if(gg > r)
  {
    ans += (gg - r) * w[g];
    return r;
  }
  return gg;
}

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

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