Disjoint-set data structure - Wikipedia