Możliwą modyfikacją tej metody jest trzymanie w każdym węźle listy wskaźnika do jej początku – wtedy Find działa w czasie stałym, zaś Union wymaga poprawienia takich wskaźników na jednej z łączonych list. Jeśli dołącza się zawsze mniejszą listę do większej, operacja Union działa w zamortyzowanym czasie (innymi słowy, sekwencja operacji na tej strukturze dla elementów działa łącznie w czasie ).

Implementacja przez las zbiorów rozłącznych Inną techniką implementacji jest użycie tzw. lasów zbiorów rozłącznych. Każdy zbiór jest reprezentowany jako drzewo skierowane, którego korzeń jest reprezentantem. W najprostszej wersji operacje wyglądają następująco:

function MakeSet(x) x.parent := null

function Find(x) if x.parent == null return x

return Find(x.parent)

function Union(x, y) xRoot = Find(x) yRoot = Find(y) if xRoot != yRoot xRoot.parent := yRoot

Tworzone w ten sposób drzewa mogą być bardzo niezrównoważone, operacja Find nie musi zatem działać w tej implementacji lepiej niż w listowej (czyli gdzie jest liczbą elementów;