Union-Find (Disjoint Set Union) отслеживает разбиение элементов на непересекающиеся множества и поддерживает две операции, работающие почти за O(1): find (в каком множестве находится x?) и union (объединить два множества). Она отлично справляется с запросами связности.
Идея
Каждое множество — это дерево с корневым представителем. С использованием и операции работают за почти постоянное время (обратная функция Аккермана, α(n)).
