并查集+kruskal==>MST

效率很低

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #define MAX 105 //自己设置最大值
  5.  
  6. // father[x]表示x的父节点
  7. int father[MAX];
  8. // rank[x]表示x的秩
  9. int rank[MAX];
  10.  
  11. typedef struct
  12. {
  13. int i,j;
  14. int distance;
  15. } E;
  16.  
  17. E edges[MAX*MAX];
  18.  
  19. // 初始化
  20. void Make_Set(int n)
  21. {
  22. for(int i=; i<=n; ++i)
  23. {
  24. father[i] = i;
  25. rank[i] = ;
  26. }
  27. }
  28.  
  29. // 查找
  30. int Find_Set(int x)
  31. {
  32. if(x != father[x])
  33. return Find_Set(father[x]);
  34. return x;
  35. }
  36.  
  37. // 合并
  38. void Union(int x, int y)
  39. {
  40. x = Find_Set(x);
  41. y = Find_Set(y);
  42. if(x == y) // x,y在同一个集合
  43. return;
  44. if(rank[x] > rank[y])
  45. father[y] = x;
  46. else if(rank[x] < rank[y])
  47. father[x] = y;
  48. else
  49. {
  50. rank[y]++;
  51. father[x] = y;
  52. }
  53. }
  54.  
  55. bool myfunction ( const E a , const E b )
  56. {
  57. return (a.distance<b.distance);
  58. }
  59.  
  60. int main()
  61. {
  62. freopen("input.txt","r",stdin);
  63. int i,j,n,m,u,v;
  64. int count,Sum;
  65. while(cin>>n&&n!=)
  66. {
  67. count=Sum=;
  68. for(i=; i<n; i++)
  69. for(j=; j<n; j++)
  70. {
  71. edges[i*n+j].i=i;
  72. edges[i*n+j].j=j;
  73. cin>>edges[i*n+j].distance;
  74. }
  75. sort(edges,edges+(n*n),myfunction);
  76. Make_Set(n);
  77. for(i=; i<n*n; i++)
  78. {
  79. if(count==n-) break;
  80. if(edges[i].i!=edges[i].j&&(Find_Set(edges[i].i)!=Find_Set(edges[i].j)))
  81. {
  82. Union(edges[i].i,edges[i].j);
  83. Sum+=edges[i].distance;
  84. }
  85. }
  86. cout<<Sum<<endl;
  87. }
  88. return ;
  89. }

Kruskal最小生成树的更多相关文章

  1. Kruskal 最小生成树算法

    对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...

  2. 贪心算法(2)-Kruskal最小生成树

    什么是最小生成树? 生成树是相对图来说的,一个图的生成树是一个树并把图的所有顶点连接在一起.一个图可以有许多不同的生成树.一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n ...

  3. Prim和Kruskal最小生成树

    标题: Prim和Kruskal最小生成树时 限: 2000 ms内存限制: 15000 K总时限: 3000 ms描述: 给出一个矩阵,要求以矩阵方式单步输出生成过程.要求先输出Prim生成过程,再 ...

  4. [算法系列之二十七]Kruskal最小生成树算法

    简单介绍 求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法. 在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树. 我们有一 ...

  5. poj 2031Building a Space Station(几何判断+Kruskal最小生成树)

    /* 最小生成树 + 几何判断 Kruskal 球心之间的距离 - 两个球的半径 < 0 则说明是覆盖的!此时的距离按照0计算 */ #include<iostream> #incl ...

  6. CSP 地铁修建 Kruskal (最小生成树+并查集)

    问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁. 地铁由很多段隧道组成,每段隧道连接两个交通枢纽.经过勘探,有m段隧道作为候选,两个交通 ...

  7. poj_2349 Kruskal 最小生成树

    题目大意 给定N个点的坐标,这N个点之间需要进行通讯.通讯方式可以采用卫星通信或无线通信,若两点之间采用为卫星通信,则两点之间的距离无限制,若采用无线通讯,则两点之间的距离不能大于某个值D.      ...

  8. vijos P1234口袋的天空(Kruskal)(最小生成树)

    P1234口袋的天空 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 描述 给你云朵的个数N,再给你M个关系,表示哪些云朵 ...

  9. POJ 1789 Truck History (Kruskal最小生成树) 模板题

    Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for v ...

  10. 并查集和kruskal最小生成树算法

    并查集 先定义 int f[10100];//定义祖先 之后初始化 for(int i=1;i<=n;++i) f[i]=i; //初始化 下面为并查集操作 int find(int x)//i ...

随机推荐

  1. java完整的代码执行过程 堆栈+方法区

    07\15-面向对象(static关键字-内存图解)

  2. 去掉影响效率的where 1=1

    最近看了篇文章,觉得挺有道理.实际项目中,我们进行sql条件过滤,我们不能确定是不是有条件.也不能确定条件的个数.大多数人会先把sql语句组装为: 这样,如果有其他过滤条件直接加上“and 其他条件” ...

  3. 使用HttpWebRequest以及HttpWebResponse读取Http远程文件

     主页>杂项技术>.NET(C#)> 使用HttpWebRequest以及HttpWebResponse读取Http远程文件 jackyhwei 发布于 2010-08-15 21: ...

  4. 使用FormData上传文件、图片

    关于FormData XMLHttpRequest Level 2添加了一个新的接口  ---- FormData 利用FormData对象,可以通过js用一些键值对来模拟一系列表单控件,可以使用XM ...

  5. 将double类型的值保留几位小数

    1.第一个参数(3.1415926)是要处理的数值.第二个参数(1)为要保留的几位小数.第三个参数是按照“四舍五入”还是"直接取这一位的值"(MidpointRounding.To ...

  6. 使用awstats分析iis站点的日志

    环境:win7 + iis7 + perl(ActivePerl-5.20.1.2000) + awstats 7.3 一.找到iis日志所在目录 建议全部都打勾 二.安装perl AWStats是p ...

  7. bug汇总 (EF,Mvc,Wcf)

    此博客用于在开发过程总bug及其解决方案的记录. 1. 异常信息:  ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象 ...

  8. php中的常用魔术方法总结

    以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...

  9. MySQL excel导入错误 Out of range value adjusted for column

    修改my.ini,将 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"改为 sql ...

  10. TDirectory.CreateDirectory 完整、严谨的创建一个目录

    描述:创建一个目录,不包含多级目录(多级目录使用System.SysUtils.ForceDirectories,Vcl.FileCtrl.ForceDirectories已过时) procedure ...