Изменения
Нет описания правки
=== Реализация ===
'''bool ''' visited[n]; vector <'''int'''> query[n];
'''int''' dsu_get dsuGet(v : '''int''') :
'''if''' (v == dsu[v])
'''return''' v
'''else'''
'''return''' dsu[v] = dsu_get dsuGet(dsu[v]);
function unite union(a : '''int''', b : '''int''', new_ancestor newAncestor : '''int''' ) : a = dsu_get dsuGet(a); b = dsu_get dsuGet(b); dsu[a] = b; ancestor[b] = new_ancestor;newAncestor
function dfs(v : '''int''') : visited[v] = '''true'''; '''forforeach''' u : (u таких, что (v, u) — ребро в '''in''' G) '''if''' (not visited[u]) dfs(u); union(v, u, v); '''for''' (i = 0; i < '''to''' query[v].size; i++)- 1 '''if''' (visited[query[v][i]]) cout << "LCA " << v << " " << u << " = " << ancestor[dsu_get(q[v][i])];
dfs(1); // можно запускать от любой вершины