并查集由一个整数型的数组和两个函数构成。数组pre[]记录每个点的前导点是什么,函数find是查找,join是合并。
join函数:
下面分别是这两个函数的实现形式:
find函数:
int find(int x)
{
int r = x;
while (pre[r] != r)
r = pre[r];
int i = x; int j;
while (i != r)
{
j = pre[i]; pre[i] = r; i = j;
}
return r;
}
join函数:
void join(int x, int y)
{
//判断x y是否连通
//如果已经连通,就不用管了 //如果不连通,就把它们所在的连通分支合并起,
int fx = find(x), fy = find(y);
if (fx != fy)
pre[fx] = fy;
}