diff options
| author | Gloria Mundi <gloria@gloria-mundi.eu> | 2024-11-16 01:24:14 +0100 |
|---|---|---|
| committer | Gloria Mundi <gloria@gloria-mundi.eu> | 2024-11-16 01:24:14 +0100 |
| commit | 98567ec798aa8ca2cfbcb85c774dd470f30e30d4 (patch) | |
| tree | 5113d5cc24d1ad5f93810b6442ce584a36950dc8 /graph/binary_lifting.cpp | |
| parent | ad3856a6b766087df0036de0b556f4700a6498c9 (diff) | |
| parent | 8d11c6c8213f46f0fa19826917c255edd5d43cb1 (diff) | |
mzuenni tests
Diffstat (limited to 'graph/binary_lifting.cpp')
| -rw-r--r-- | graph/binary_lifting.cpp | 28 |
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; - } -}; |
