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

并查集模板

时间:2018-04-05 15:04:50      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:log   col   div   body   gpo   参考   www   ++   return   

关于并查集的原理这里就不加阐述,参考博文:https://www.tuicool.com/articles/Zb2qYzj

 1 int a[maxn];
 2 int fa[maxn];
 3 void UFinit(int x)//并查集的初始化
 4 {
 5     for(int i = 0; i < x; i++)fa[i] = -1;
 6 }
 7 int Find(int x)//查找并返回节点x所属集合的根节点
 8 {
 9     int s;//查找位置
10     for(s = x; fa[s] >= 0; s = fa[s]);//查找到父节点为负数,此时s为根节点
11     while(s != x)//路径压缩
12     {
13         int tmp = fa[x];
14         fa[x] = s;
15         x = tmp;
16     }
17     return s;
18 }
19 void Union(int x, int y)//x,y属于不同的两个集合,现在合并这两个集合
20 {
21     x = Find(x);//x变成原来x的根节点
22     y = Find(y);//y变成原来y的根节点
23     int tmp = fa[x] + fa[y];//两个集合结点个数之和(负数)
24     //如果y所在集合结点个数 > x所在集合结点个数(负数)
25     if(fa[x] > fa[y])
26     {
27         fa[x] = y;//将根节点x所在的树作为y的子树
28         fa[y] = tmp;//更新y的结点个数
29     }
30     else
31     {
32         fa[y] = x;//将根节点y所在子树作为x的子树
33         fa[x] = tmp;//更新x的结点个数
34     }
35 }

 

并查集模板

标签:log   col   div   body   gpo   参考   www   ++   return   

原文地址:https://www.cnblogs.com/fzl194/p/8722456.html

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