Skip to content

Commit 30c5733

Browse files
committed
saving progress
1 parent 54082af commit 30c5733

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

library/trees/ladder_decomposition/ladder_decomposition.hpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@
1111
struct ladder {
1212
int n;
1313
vector<vi> b_tbl;
14-
vi d, p, dl, idx_l, l_tbl;
14+
vi d, p, dl, le, ri, l_tbl;
1515
//! @param adj forest (rooted or unrooted)
1616
//! @time O(n log n)
1717
//! @space O(n log n) for b_tbl. Everything else is O(n)
18-
ladder(const vector<vi>& adj):
19-
n(sz(adj)), d(n), p(n, -1), dl(n), idx_l(n) {
18+
ladder(const vector<vi>& adj) : n(sz(adj)), d(n), p(n, -1), dl(n), le(n), ri(n) {
2019
auto dfs = [&](auto&& self, int v) -> void {
2120
dl[v] = v;
2221
for (int u : adj[v])
@@ -30,9 +29,10 @@ struct ladder {
3029
if (p[i] == -1) p[i] = i, dfs(dfs, i);
3130
if (p[i] == i || dl[p[i]] != dl[i]) {
3231
int v = dl[i], len = (d[v] - d[i]) * 2;
33-
idx_l[v] = sz(l_tbl) + d[v];
32+
le[v] = sz(l_tbl);
3433
for (; v != -1 && len--; v = p[v])
3534
l_tbl.push_back(v);
35+
ri[v] = sz(l_tbl);
3636
}
3737
}
3838
b_tbl = treeJump(p);
@@ -49,6 +49,9 @@ struct ladder {
4949
int bit = __lg(k);
5050
v = b_tbl[bit][v], k -= (1 << bit);
5151
int leaf = dl[v];
52-
return l_tbl[idx_l[leaf] + k - d[v]];
52+
int idx = le[leaf] + k + d[leaf] - d[v];
53+
assert(le[leaf] <= idx);
54+
assert(idx < ri[leaf]);
55+
return l_tbl[le[leaf] + k + d[leaf] - d[v]];
5356
}
5457
};

0 commit comments

Comments
 (0)