Submission #1276642

#TimeUsernameProblemLanguageResultExecution timeMemory
1276642avighnaTree (IOI24_tree)C++20
10 / 100
2095 ms19452 KiB
#include <bits/stdc++.h>

int n;
std::vector<int> p, w;
std::vector<std::vector<int>> adj;

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

long long query(int L, int R) {
  std::vector<int64_t> c(n);
  auto dfs = [&](auto &&self, int u) -> int64_t {
    if (adj[u].empty()) {
      return c[u] = L;
    }
    int64_t sum = 0;
    for (int &i : adj[u]) {
      sum += self(self, i);
    }
    if (sum > R) {
      c[u] = sum - R;
      sum = R;
    }
    return sum;
  };
  dfs(dfs, 0);
  int64_t ans = 0;
  for (int i = 0; i < n; ++i) {
    ans += w[i] * std::abs(c[i]);
  }
  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...