1. //克鲁斯卡尔
  2. #include<iostream>
  3. #include<algorithm>
  4. using namespace std;
  5. const int maxn = ;
  6. struct node
  7. {
  8. int begin, end, len;
  9. }cun[maxn];
  10. int n, fa[maxn], ans, m;
  11.  
  12. bool cmp(node a, node b)
  13. {
  14. return a.len<b.len; //按长度有小到大排序
  15. }
  16.  
  17. void init()
  18. {
  19. for (int i = ; i <= n; i++)
  20. {
  21. fa[i] = i;
  22. }
  23. }
  24.  
  25. int find(int x)
  26. {
  27. if (x == fa[x])
  28. return fa[x];
  29. else
  30. return fa[x] = find(fa[x]);
  31. }
  32.  
  33. void join(int a, int b)
  34. {
  35. a = find(a);
  36. b = find(b);
  37. if (a != b)
  38. fa[b] = a;
  39. }
  40.  
  41. int kruskal()
  42. {
  43. sort(cun, cun + m, cmp);
  44. init(); //初始化并查集
  45. ans = ;
  46. for (int i = ; i<m; i++)
  47. {
  48. if (find(cun[i].begin) != find(cun[i].end)) //一条边的两个端点不在同一个集合,则选他,并合并
  49. {
  50. join(cun[i].begin, cun[i].end);
  51. ans += cun[i].len;
  52. }
  53. }
  54. return ans;
  55. }
  56.  
  57. int main()
  58. {
  59. while (cin >> n)
  60. {
  61. if (n == ) break;
  62. m = n*(n - ) / ;
  63. for (int i = ; i<m; i++)
  64. cin >> cun[i].begin >> cun[i].end >> cun[i].len;
  65. cout << kruskal() << endl;
  66. }
  67. return ;
  68. }
  1. //prim
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8.  
  9. #define INF 0x7fffffff
  10. # define MAXN
  11. typedef long long int LL;
  12.  
  13. LL n, m;
  14. LL cmpa[MAXN][MAXN], book[MAXN], dis[MAXN];
  15.  
  16. int main()
  17. {
  18. LL a, b, weight, ans, p, q, f1, f2, minn, mark;
  19. while (scanf("%I64d", &n) && n)
  20. {
  21. //初始化 这题prime算法合适,边那摩多,都是完全图了
  22. for (LL i = ; i<MAXN; i++)
  23. {
  24. dis[i] = INF;
  25. for (LL j = ; j<MAXN; ++j)
  26. cmpa[i][j] = INF;
  27. }
  28.  
  29. memset(book, , sizeof(book));
  30. ans = ;
  31.  
  32. for (LL i = ; i<n*(n - ) / ; ++i)
  33. {
  34. scanf("%I64d %I64d %I64d", &a, &b, &weight);
  35. cmpa[a][b] = cmpa[b][a] = weight;
  36. }
  37.  
  38. //连通图
  39. book[] = ;
  40. dis[] = -;
  41.  
  42. for (LL t = ; t<n; ++t)
  43. {
  44. for (LL i = ; i <= n; ++i)
  45. {//更新dis中的值
  46. for (LL j = ; j <= n; ++j)
  47. {
  48. if (book[j] && dis[i]>cmpa[i][j])
  49. { //j在树中
  50. dis[i] = cmpa[i][j];
  51. }
  52. }
  53. }
  54.  
  55. //选点建树
  56. minn = INF, mark = ;
  57. for (LL i = ; i <= n; ++i)
  58. {
  59. if (book[i])
  60. continue;
  61. else
  62. {
  63. if (dis[i] < minn)
  64. {
  65. minn = dis[i];
  66. mark = i;
  67. }
  68. }
  69. }
  70.  
  71. if (minn != INF)
  72. {
  73. ans += minn;
  74. book[mark] = ;
  75. dis[mark] = -;
  76. }
  77.  
  78. }
  79. cout << ans << endl;
  80.  
  81. }
  82. return ;
  83. }

hdu1233 还是畅通工程 基础最小生成树的更多相关文章

  1. hdu1233 继续畅通工程 (最小生成树——并查集)

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  2. HDU1233 还是畅通工程【最小生成树】

    题意: 求出连接各个村庄最小的公路总长度,把最小公路总长度求出来. 思路: 最小生成树原理,带入数据求得. 代码: prim: #include<iostream> #include< ...

  3. hdu1879 继续畅通工程 基础最小生成树

    #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> u ...

  4. hdu1863 畅通工程 基础最小生成树

    #include <iostream> #include <cstdio> #include <algorithm> #define N 110 #define M ...

  5. HDU-1233 还是畅通工程 (prim 算法求最小生成树)

    prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  6. 最小生成树: HDU1233还是畅通工程

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. HDU1875——畅通工程再续(最小生成树:Kruskal算法)

    畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...

  8. HDU1879--继续畅通工程(最小生成树)

    Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计 ...

  9. HDU1233--还是畅通工程(最小生成树)

    Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直 ...

随机推荐

  1. 《Java虚拟机原理图解》4.JVM机器指令集

    0. 前言 Java虚拟机和真实的计算机一样,执行的都是二进制的机器码:而我们将.java 源码编译成.class 文件,class文件便是Java虚拟机可以认识的二进制机器码,Java可以识别cla ...

  2. HDOJ 5091 Beam Cannon 扫描线

    线段树+扫描线: 我们用矩形的中心点来描写叙述这个矩形,然后对于每一个敌舰,我们建立一个矩形中心的活动范围,即矩形中心在该范围内活动就能够覆盖到该敌舰.那么我们要求的问题就变成了:随意一个区域(肯定也 ...

  3. 4. 基本TCP套接字编程

    基本函数接口 socket函数 #include <sys/socket.h> int socket(int family, int type, int protocol); 成功时返回一 ...

  4. 流媒体开发之开源项目live555---live555 server 编译 包括更改帧率大小

    由于要测试8148解码器的性能,需要搭建不同帧率25fps - >30fps,宏块大小defualt 100 000 -> 200 000不同大小的h264码流,所以就需要编译改动的liv ...

  5. EhCache+Redis实现分布式缓存

    Ehcache集群模式 由于 EhCache 是进程中的缓存系统,一旦将应用部署在集群环境中,每一个节点维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新的数据无法在其它节点中共享,这不仅会降 ...

  6. maven配置本地仓库和国内镜像仓库,解决国内访问国外中央仓库速度过慢问题

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 1.配置本地仓库   打开conf文件夹下面的setting.xml文件 红色方框为配置本地仓 ...

  7. HDU - 1269 迷宫城堡(有向图的强连通分量)

    d.看一个图是不是强连通图 s.求出强连通分量,看看有没有一个强连通分量包含所有点. c.Tarjan /* Tarjan算法 复杂度O(N+M) */ #include<iostream> ...

  8. SideBar---fixed定位

      <style> /*外层fixed*/ body{ width:2000px; height:2000px; background:#000; } .wrap { position: ...

  9. codeforces 414B B. Mashmokh and ACM(dp)

    题目链接: B. Mashmokh and ACM time limit per test 1 second memory limit per test 256 megabytes input sta ...

  10. POJ3696:The Luckiest number(欧拉函数||求某数最小的满足题意的因子)

    Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his own ...