Submission #1206606

#TimeUsernameProblemLanguageResultExecution timeMemory
1206606HappyCapybaraTree (IOI24_tree)C++20
0 / 100
2093 ms21776 KiB
#include "tree.h"
#include<bits/stdc++.h>
using namespace std;

#define ll long long

int n, l, r;
vector<int> w, c, st;
vector<vector<int>> g;

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

void dfs(int cur){
  for (int next : g[cur]){
    dfs(next);
    st[cur] += st[next];
  }
  if (st[cur] < l){
    c[cur] = l-st[cur];
    st[cur] = l;
  }
  if (st[cur] > r){
    c[cur] = r-st[cur];
    st[cur] = r;
  }
}

ll query(int L, int R){
  l = L;
  r = R;
  c.assign(n, 0);
  st.assign(n, 0);
  dfs(0);
  ll res = 0;
  for (int i=0; i<n; i++) res += (ll)w[i]*(ll)abs(c[i]);
  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...