我认识的并查集
一般包含以下几部分
1、储存前驱节点的数组 这个我喜欢叫db[n](代表缩写)每个聚落都有它们的代表节点。
2、一个查找代表节点的函数,如果它的代表不是它自己,那就寻找并返回那个代表。
int find(int x)//路径压缩版
{
if(db[x]!=x) db[x]=find(db[x]);
return db[x];
}
int find(int x)//未路径压缩
{
return db[x]==x?x:find(db[x]);
}
3、合并函数,
//同时判断是否在同一集合和合并两者
bool hb(int x,int y)
{
int xx=find(x),yy=find(y);
if(xx!=yy)
{
db[xx]=yy;
return 1;
}
return 0;
}
4、初始化
不一定要写成单独的函数,但一定要有,把每个节点代表赋为它自己,并且还能初始化其他有必要的数据。