C реализация структуры данных объединения-поиска (с наборами в виде деревьев). В этой реализации реализовано сжатие путей и объединение по рангу, поэтому амортизированное время на операцию равно O(alpha(n)).
union_find_elem_t * make_set ( void * element );
union_find_elem_t * find ( union_find_elem_t * element );
union_find_elem_t * merge ( union_find_elem_t * a , union_find_elem_t * b );