并查集入门

  并查集是将元素按需要进行集合合并及查找的方法,使用数组pre[x]表示x的上级元素。

  1.查找。

  可用pre[x]==x来表示x为该集合的根,用根来做这个集合的代表,查找时使用递归找到根判断该元素所在集合。

 

int find(int x)
{
  if(x!=pre[x])
  return find(pre[x]);
 else
  return x;
}

  2.合并。

  只需将一个集合的根设为另一个集合的上级就可以完成两个集合的合并。

void together(int x,int y)
{
  int m=find(x);
  int n=find(y);  
  if(m!=n)
  pre[m]=n;
}

  但有很大的可能使得集合程线性排列,这样就会使每次查找的速度变慢,所以就要路径压缩。路径压缩要每次搜索时将集合结点全部直接连接到根上,这样处理之后搜索复杂度只有O(1)。

int findnew(int x)
{
  if(pre[x]!=x)
    return pre[x]=findnew(pre[x]);
  else
    return x; }

   以上便是并查集最基本的两个操作。

posted @ 2019-02-24 21:18  见风仍是风  阅读(142)  评论(0)    收藏  举报