并查集

145 阅读1分钟

并查集定义

并查集是一种树型的数据结构,用于解决集合快速合并和查询问题。

集合定义

需要一个数组用来保存当前集合属于哪个集合编号,还需要定义一个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;
}