summaryrefslogtreecommitdiff
path: root/graph/binary_lifting.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'graph/binary_lifting.cpp')
-rw-r--r--graph/binary_lifting.cpp28
1 files changed, 0 insertions, 28 deletions
diff --git a/graph/binary_lifting.cpp b/graph/binary_lifting.cpp
deleted file mode 100644
index 0b8c218..0000000
--- a/graph/binary_lifting.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-struct Lift {
- vector<int> dep, par, jmp;
-
- Lift(vector<vector<int>> &adj, int root):
- dep(adj.size()), par(adj.size()), jmp(adj.size(), root) {
- function<void(int,int,int)> dfs = [&](int u, int p, int d) {
- dep[u] = d, par[u] = p;
- jmp[u] = dep[p] + dep[jmp[jmp[p]]] == 2*dep[jmp[p]]
- ? jmp[jmp[p]] : p;
- for (int v: adj[u]) if (v != p) dfs(v, u, d+1);
- };
- dfs(root, root, 0);
- }
-
- int depth(int v) { return dep[v]; }
- int lift(int v, int d) {
- while (dep[v] > d) v = dep[jmp[v]] < d ? par[v] : jmp[v];
- return v;
- }
- int lca(int u, int v) {
- v = lift(v, dep[u]), u = lift(u, dep[v]);
- while (u != v) {
- auto &a = jmp[u] == jmp[v] ? par : jmp;
- u = a[u], v = a[v];
- }
- return u;
- }
-};