Root of i isid[id[id[…id[i]…]]](keep going until it doesn’t change)
Operations
Find( p, q ): check if p and q have the same root
Union( p, q ): to merge components containing p and q, set id of p’s root to the id of q’s root
Implementation
publicclassQuickUnionUF
{privateint[] id;
publicQuickUnionUF( int N )
{
id = newint[N];
for( int i = 0; i< N; i++ )
{
id[i] = i;
}
}
privateintroot( int i )
{
// chase parent pointer until reach rootwhile( i != id[i] )
{
i = id[i];
}
return i;
}
publicbooleanconnected( int p, int q )
{
return root( p ) == root( q );
}
publicvoidunion( int p, int q )
{
int i = root( p ),
j = root( q );
id[i] = j;
}
}