并查集是一种对父亲节点信息有记录的数据结构,常与图论结合
更好的阅读体验:我的博客
模板
//初始化
for(int i=1;i<=n;i++)
fa[i]=i;
//查找
int father(int x) {
return fa=fa[x]==x?x:father(fa[x]);
}
//合并
void unite(int x,int y) {
fa[father(x)]=father(y);
}
题型
-
判断一共有几个根节点:循环一遍判断
father(i)
是否等于 i i i -
特殊题型1:种类(关系)并查集:有几个种类就将数组开到几倍 n n n ,这样每一段 n n n 个数组表示一个种类。注意:虚拟节点和真实节点,注意合并的顺序
-
特殊题型2:并查集删边:可离线的情况下,倒序添加边。
题目
洛谷P1892 团伙 种类并查集
洛谷P1525 关押犯罪 种类并查集+贪心
洛谷P1955 程序自动分析
洛谷P3958 奶酪
洛谷P3144 Closing the Farm S 并查集删边后联通问题(离线)
洛谷P3144 并查集倒序加边