首页 > 其他 > 详细

并查集 -- HDU 1232 UVALA 3644

时间:2015-05-25 00:44:25      阅读:338      评论:0      收藏:0      [点我收藏+]

并查集:

 1 int pa[maxn],Rank[maxn];
 2 ///初始化 x 集合
 3 void make_set(int x)
 4 {
 5     pa[x]=x;
 6     Rank[x]=0;
 7 }
 8 ///递归查找 x 所在的集合
 9 int find_set(int x)
10 {
11     if(pa[x]!=x) pa[x]=find_set(pa[x]);
12     return pa[x];
13 }
14 ///更新根节点,如果不更新可能会暴栈
15 void mix(int x,int y)
16 {
17     int xx=find_set(x);
18     int yy=find_set(y);
19     if(xx!=yy)
20     {
21         pa[yy]=xx;
22     }
23 }
24 ///锁点,合并 x, y 所在的集合,用到路径压缩,按秩合并
25 ///启发式合并
26 void Union(int x,int y)
27 {
28     x=find_set(x);
29     y=find_set(y);
30     if(Rank[x]>Rank[y])
31         pa[y]=x;
32     else if(Rank[x]<Rank[y])
33         pa[x]=y;
34     else if(Rank[x]==Rank[y])
35     {
36         pa[x]=y;
37         Rank[y]++;
38     }
39 }

 

初级并查集:HDU-理解 find_set()

题意:n个结点,m条边,求再连几条边能使得全部结点连通;

思路:并查集,求该图中有几个连通分支,然后连通块的个数-1;

技术分享1232

 

并查集 -- HDU 1232 UVALA 3644

原文:http://www.cnblogs.com/ACMERY/p/4526815.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!