并查集

个人理解:并查集就是对数据分块,并查找任意数据是否在同一块里面,用到的是''标记"思想,在每一块中选一个队长,掌门,经理。。。。。总之这个特殊数据就代表了他所在的这一块,任意两数据比较他们的掌门就能知道是不是属于同一块了。查:就是寻找掌门;并:就是将两个块的掌门变成同一个;

 

实现:首先pre[i]装着i的上级,当p[i]=i的时候,他就是掌门;

查找掌门的代码:

 

int find(int root)
{//查找root结点的掌门
    int son,temp;
   son=root;
  while(root!=pre[root])//退出条件,自己的上级就是自己 root=pre[root];//寻找自己上级的上级 //此时,root就是原root的掌门了 while(son!=root) { temp=pre[son]; pre[son]=root;//将自己的上级设为掌门,实现了路径压缩,每个人的上级都是掌门 son=temp;//继续找掌门,直到掌门出现 } return root;//掌门驾到~~ }

 

合并掌门代码:

void join(int root1,int root2)
{//查找root1和root2的掌门,并且合并
    int x=find(root1);
    int y=find(root2);
    if(x!=y)//此时x是root1的掌门,y是root2的
    pre[x]=y;//将x的上级标为y,也就是说两帮派合并了
}

   学习的博客:https://blog.csdn.net/qq_41593380/article/details/81146850

   

  

转载于:https://www.cnblogs.com/qq2210446939/p/10849449.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值