В основе этого алгоритма лежит использование массива целых чисел, обладающих тем свойством, что p и q связаны тогда и только тогда, когда p-я и q-я записи массива равны. Мы инициализируем i-ую запись массива значением i при 0<=i<N. Чтобы реализовать операцию union для p и q, мы просматриваем массив, изменяя все записи с именем p на записи с именем q. Этот выбор произволен - можно было бы все записи с именем q изменять на записи с именем p.

#include <iostream.h>
static const int N = 10000;
int main()
   {
int i, p, q, id[N];
for(i=0; i < N; i++) id[i] = i;
while(cin>>p>>q) {
int t=id[p];
if(t==id[q]) continue;
for(i=0; i < N; i++)
if(id[i] == t) id[i] = id[q];
cout<<" "<<p<<" "<<q<<endl;
                 }
   }
Эта программа считывает последовательность пар неотрицательных целых чисел, меньших чем N, из стандартного ввода (интерпретируя пару p q, как "связать объект p c объектом q") и выводит пары, представляющие объекты, которые ещё не связаны. Она поддерживает массив id, содержащий запись для каждого объекта и характеризующийся тем, что элементы id[p] и id[q] равны тогда и только тогда, когда объекты p и q связаны. Для простоты N определена как константа времени компиляции. Иначе можно было считывать её из ввода и распределять массив id динамически.