并查集


UFIND()

1
2
3
4
5
6
7
8
初始化dir数组使值和自身下标相等
初始化结构体数组G存放连通边
for i=0 to g.len-1
MERGE(g.x,g,y)
for i=0 to 顶点数
if(dir[i]==i)
count=count+1
return count

MERGE(x,y)

1
2
3
4
fx=FFIND(x)
fy=FFIND(y)
if fx!=fy
dir[fy]=fx

FFIND(n)

1
2
3
4
5
6
7
8
i=n
while dir[i]!=i
i=dir[i]
while dir[n]!=i
t=dir[n]
dir[n]=i
n=t
return n