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];

}

posted @ 2021-12-19 19:16  80k  阅读(163)  评论(0)    收藏  举报