并查集
前言
acm寒假训练第二天,又是令人愉快的自闭一天!
一、并查集是什么?
并查集是一种树形结构,又叫“不相交集合”,保持了一组不相交的动态集合,每个集合通过一个代表来识别,代表即集合中的某个成员,通常选择根做这个代表。
二、并查集的使用
1.写法
代码如下(示例):
int f[100000];
int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
void un(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy) f[fx]=fy;
}
2.带权并查集
代码如下(示例):
int find(int x)
{
if(fa[x].fa != x)
{
int t=fa[x].fa;
fa[x].fa = find(fa[x].fa);
fa[x].wz+=fa[t].wz;
}
return fa[x].fa;
}