并查集定义
并查集是一种树型的数据结构,用于解决集合快速合并和查询问题。
集合定义
需要一个数组用来保存当前集合属于哪个集合编号,还需要定义一个find(x)函数,用来查询x集合所欲哪个集合编号。用递归地方式查找,并且需要边查询边赋值。P[x]==x?:x:p[x]=find(p[x]);
集合合并
将x,y所属的集合合并,需要使用find函数查询x、y所属的集合。P[find(x)]=find(y);
代码
int p[N];//p[i]=j;表示i集合的集合编号为j;
void init(int n)//初始化集合
{
for(int i=0;i<=n;i++) p[i]=i;
}
int find(int x)//查询x所属的集合编号
{
return x==p[x]?x:p[x]=find(p[x]);
}
void unions(int x,int y)//合并x、y所属的集合
{
int px=find(x),py=find(y);
p[px]=py;
}