点击打开链接

某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 

Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。 
当N为0时,输入结束,该用例不被处理。

Output对每个测试用例,在1行里输出最小的公路总长度。

Sample Input

  1. 3
  2. 1 2 1
  3. 1 3 2
  4. 2 3 4
  5. 4
  6. 1 2 1
  7. 1 3 4
  8. 1 4 1
  9. 2 3 3
  10. 2 4 2
  11. 3 4 5
  12. 0

Sample Output

  1. 3
  2. 5
  3.  
  4. Huge input, scanf is recommended.

隔了那么长时间再来做这道题,还是犯了上次同样的错误,初始化parent数组

  1. for(int i = 0; i <= n; i++)

这个地方一定是<=,一直不过真的很不爽,还是自己对代码不熟悉。

AC代码

  1. #include<stdio.h>
  2. #include<algorithm>
  3.  
  4. using namespace std;
  5.  
  6. int parent[]; //定义parent数组用来判断边与边是否形成环路
  7. int sum;
  8.  
  9. struct Edge
  10. {
  11.  
  12. int beginn;
  13. int endd;
  14. int weight;
  15.  
  16. } edges[];
  17.  
  18. bool cmp(Edge a, Edge b)
  19. {
  20. if(a.weight == b.weight)
  21. return a.beginn < b.beginn;
  22. else
  23. return a.weight < b.weight;
  24. }
  25.  
  26. int Find(int f)
  27. {
  28. while( parent[f] > )
  29. {
  30. f = parent[f];
  31. }
  32.  
  33. return f;
  34.  
  35. }
  36.  
  37. //Kruskal算法生成最小生成树
  38. void MiniSpanTree_Kruskal(int x, int y)
  39. {
  40. int i, n, m;
  41.  
  42. for( i = ; i <= x; i++ )
  43. {
  44. parent[i] = ;
  45. }
  46.  
  47. for( i = ; i < y; i++ )
  48. {
  49. n = Find(edges[i].beginn);
  50. m = Find(edges[i].endd);
  51.  
  52. if( n != m ) //如果n==m,则形成环路不满足!
  53. {
  54. parent[n] = m; //将此边的结尾顶点放入下标为起点的parent数组中,表示此顶点已经在生成树集合中
  55.  
  56. sum += edges[i].weight;
  57. }
  58. }
  59.  
  60. printf("%d\n", sum);
  61. }
  62.  
  63. int main()
  64. {
  65. int t, i, ans;
  66.  
  67. while(scanf("%d", &t) != EOF , t)
  68. {
  69. sum = ;
  70. ans = t*(t - )/;
  71.  
  72. for( i = ; i < ans; i++ )
  73. {
  74. scanf("%d %d %d", &edges[i].beginn, &edges[i].endd, &edges[i].weight);
  75. }
  76.  
  77. sort(edges, edges+ans, cmp);
  78.  
  79. MiniSpanTree_Kruskal(t, ans);
  80.  
  81. }
  82.  
  83. return ;
  84.  
  85. }

还有一种叫做PRIM算法的也可以解这道题。

PRIM算法

A - 还是畅通工程(最小生成树)的更多相关文章

  1. hdu 1879 继续畅通工程 (最小生成树)

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. HDU1863 畅通工程---(最小生成树)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)

    还是畅通工程                                                                            Time Limit: 4000/2 ...

  4. HDU 1233 还是畅通工程 (最小生成树)

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

  5. hdu1863 畅通工程(最小生成树之prim)

    Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可 ...

  6. C - 继续畅通工程 最小生成树

    省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经 ...

  7. HDU 1233.还是畅通工程-最小生成树(Prime)

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

  8. 还是畅通工程(最小生成树 并查集 Prim Kruskal)

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

  9. HDU 1863 畅通工程(最小生成树,prim)

    题意: 给出图的边和点数,要求最小生成树的代价,注:有些点之间是不可达的,也就是可能有多个连通图.比如4个点,2条边:1-2,3-4. 思路: 如果不能连通所有的点,就输出‘?’.之前以为每个点只要有 ...

  10. (step6.1.5)hdu 1233(还是畅通工程——最小生成树)

    题目大意:输入一个整数n,表示有n个村庄,在接下来的n*(n-1)/2中,每行有3个整数beigin.end.weight,分别表示路的起始村庄,结束村庄和村庄之间的距离. 求索要修的路的最短距离 解 ...

随机推荐

  1. sql server2008本地连接选择windows身份验证无法登陆的解决办法

    1.安装完sqlserver数据库,本地连接登录不了 解决办法:进入cmd,输入net start mssqlserver 服务启动后,再次用windows身份验证就可以登陆本地数据库了

  2. 【334】Python Object-Oriented Programming

    Reference: Python中self用法详解 __init__ 方法: 私有变量. Reference: [290]Python 函数 class 里面的 function 创建与此一致,只是 ...

  3. Unpacking Argument Lists

    [Unpacking Argument Lists] The reverse situation occurs when the arguments are already in a list or ...

  4. errorlevel 续1

    -------siwuxie095             常用 errorlevel 返回值:     backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用 ct ...

  5. 如何快速简单粗暴地理解Python中的if __name__ == '__main__'

    1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...

  6. Template7学习记录

    来源:http://idangero.us/template7/#.V2iXqJGF6Ul 测试用json数据: var jsonData = { people: [ { firstName: 'Jo ...

  7. error:Your local changes to the follwing files would be overwritten by merge

  8. [SoapUI]怎样获取上一个Test Step的名字

    def currentStepInd = context.currentStepIndex def previousStep = testRunner.testCase.getTestStepAt(c ...

  9. 微交互:App成功的秘诀

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 最好的产品拥有两个很棒的特点:功能和细节.产品的功能可成功吸引到人们的注意力,而产品的细节则可留住你 ...

  10. 不要怂,就是GAN (生成式对抗网络) (三):判别器和生成器 TensorFlow Model

    在 /home/your_name/TensorFlow/DCGAN/ 下新建文件 utils.py,输入如下代码: import scipy.misc import numpy as np # 保存 ...