AcWing 算法基础课 并查集
并查集支持操作:
1、将两个集合合并
2、询问两个元素是否在一个集合当中
每个集合用一棵树来表示,以根节点编号表示整个集合,每个节点存储父节点p[x]
判断树根 if(p[x]==x)
求集合编号 while(p[x]!=x) x=p[x];
合并集合:x和y,x→根节点x,p[x]=y。
优化:路径压缩
对x进行查询一次后,将查询路径上的每个节点直接指向根节点。
int p[N];
int merge(int a,int b)
{
p(find(a))=find(b);
}
int find(int x)//查询+路径压缩
{
if(p[x]!=x) x=find(p[x]);
return p[x];
}

浙公网安备 33010602011771号