Submission #1237124

#TimeUsernameProblemLanguageResultExecution timeMemory
1237124ericl23302Tree (IOI24_tree)C++20
10 / 100
2096 ms23184 KiB
#include "tree.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; int n; std::vector<ll> w; vector<vector<int>> adjacency; void init(std::vector<int> P, std::vector<int> W) { for (auto &i : W) w.push_back(i); n = (int)w.size(); adjacency.resize(n); for (int i = 1; i < n; ++i) adjacency[P[i]].push_back(i); } pair<ll, ll> recurse(int cur, ll l, ll r) { if (adjacency[cur].size() == 0) return {l, l * w[cur]}; ll tot = 0, res = 0; for (auto &child : adjacency[cur]) { auto curRes = recurse(child, l, r); tot += curRes.first; res += curRes.second; } if (tot > r) res += (tot - r) * w[cur], tot = r; return {tot, res}; } long long query(int L, int R) { return recurse(0, L, R).second; }
#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...