并查集(基础)
并查集(基础)
1.什么是并查集?
并查集,顾名思义就是“合并”或“查询”集合。这是一个图论的基本算法。
2.并查集可以用来干什么?
-
判断两个元素是否在同一个集合中:分别查找他们的根节点, 如果他们的根节点是相同的,那么这两个元素在同一个集合中。
-
合并两个集合: 分别查找两个集合的根节点,将这两个根节点连接起来。
-
在查找的同时提高效率: 具体见代码。
3.代码如何实现?
-
查找:
int find(int x){ if(x==fa[x])return x; else return fa[x]=find(fa[x]); //这一句代码可以将在节点x到根节点路径上所有节点的父节点变成根节点 }
可以看出来这个函数是使用递归实现的。
-
判断两个元素是否在同一个集合中:
bool judge(int x,int y){ int p1=find(x); int p2=find(y);//查找两个节点的根节点 return p1==p2;// 这两个元素的跟节点是否是一样的 }
-
合并两个集合:
int merge(int x,int y){ int p1=find(x); int p2=find(y); if(p1!=p2)fa[p1]=p2;// 这里的fa[n]存的是节点n的父节点 }
这是我的第一篇专栏,感谢大家多多点赞!