码迷,mamicode.com
首页 > 其他好文 > 详细

并查集入门

时间:2019-02-24 21:35:57      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:就会   class   eth   strong   入门   find   排列   get   路径压缩   

  并查集是将元素按需要进行集合合并及查找的方法,使用数组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(x);
  else
    return x; }

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

并查集入门

标签:就会   class   eth   strong   入门   find   排列   get   路径压缩   

原文地址:https://www.cnblogs.com/chendie/p/10427956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!