畅通工程

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 13266    Accepted Submission(s): 5434

Problem Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
 
Input
测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N 
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
 
Output
对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。
 
Sample Input
3 3
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100
  1. #include<stdio.h>
  2. #include<string.h>
  3. int father[],depth[];
  4. int dist[],map[][];
  5. int vis[],n;
  6. void init_B()
  7. {
  8. int i;
  9. for(i = ;i <= n;i ++)
  10. {
  11. father[i] = i;
  12. depth[i] = ;
  13. }
  14. }
  15.  
  16. int find(int x)
  17. {
  18. if(x == father[x])
  19. return x;
  20. return father[x] = find(father[x]);
  21. }
  22.  
  23. void unit(int x,int y)
  24. {
  25. x = find(x);
  26. y = find(y);
  27. if(x == y)
  28. return ;
  29. if(depth[x] < depth[y])
  30. father[x] = y;
  31. else
  32. {
  33. if(depth[x] > depth[y])
  34. father[y] = x;
  35. else
  36. {
  37. father[x] = y;
  38. depth[y]++;
  39. }
  40. }
  41. }
  42.  
  43. void init()
  44. {
  45. int i;
  46. memset(vis,,sizeof(vis));
  47. for(i = ;i <= n;i ++)
  48. dist[i] = map[][i];
  49. }
  50.  
  51. int main()
  52. {
  53. int m,i,j,k,a,b;
  54. int min,cnt,cost,sum;
  55. while(~scanf("%d%d",&m,&n) && m)
  56. {
  57. init_B();
  58. sum = cnt = ;
  59. for(i = ;i <= n;i ++)
  60. {
  61. for(j = ;j <= n;j ++)
  62. {
  63. if(i != j)
  64. {
  65. map[i][j] = << ;
  66. }
  67. }
  68. }
  69. while(m--)
  70. {
  71. scanf("%d%d%d",&a,&b,&cost);
  72. map[a][b] = map[b][a] = cost;
  73. unit(a,b);
  74. }
  75. init();
  76. for(i = ;i <= n;i ++)
  77. {
  78. if(i == find(i))
  79. cnt++;
  80. if(cnt == )
  81. break ;
  82. }
  83. if(cnt == )
  84. {
  85. printf("?\n");
  86. continue ;
  87. }
  88. for(i = ;i < n;i ++)
  89. {
  90. min = << ;
  91. for(j = ;j <= n;j ++)
  92. {
  93. if(!vis[j] && min > dist[j])
  94. {
  95. min = dist[j];
  96. k = j;
  97. }
  98. }
  99. vis[k] = ;
  100. if(min != << )
  101. sum += min;
  102. for(j = ;j <= n;j ++)
  103. {
  104. if(!vis[j] && dist[j] > map[k][j])
  105. dist[j] = map[k][j];
  106. }
  107. }
  108. printf("%d\n",sum);
  109. }
  110. return ;
  111. }
 
Sample Output
3 ?

畅通工程2 HDOJ--1863的更多相关文章

  1. Kruskal HDOJ 1863 畅通工程

    题目传送门 /* 此题为:HDOJ 1233 + HDOJ 1232 */ #include <cstdio> #include <algorithm> #include &l ...

  2. hdoj 1863 畅通工程

    并查集+最小生成树 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. <hdu - 1863> 畅通工程 并查集和最小生成树问题

    本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863  Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...

  4. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

  5. Kruskal HDOJ 1233 还是畅通工程

    题目传送门 /* 最小生成树之kruskal算法--并查集(数据结构)实现 建立一个结构体,记录两点和它们的距离,依照距离升序排序 不连通就累加距离,即为最小生成树的长度 */ #include &l ...

  6. 并查集 HDOJ 1232 畅通工程

    题目传送门 /* 并查集(Union-Find)裸题 并查集三个函数:初始化Init,寻找根节点Find,连通Union 考察:连通边数问题 */ #include <cstdio> #i ...

  7. hdu 1863 - 畅通工程(MST)

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

  8. hdoj 1879 继续畅通工程

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

  9. HDU 1863 畅通工程

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

  10. hdoj 1874 畅通工程续【dijkstra算法or spfa算法】

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

随机推荐

  1. tomcat优化系列:修改运行内存

    1.对于安装版的TOMCAT: 进入TOMCAT的安装目录下的bin目录,双击tomcat6w.exe.点击Java选项卡,可设置初始化内存,最大内存,线程的内存大小. 初始化内存:如果机器的内存足够 ...

  2. form 表单 action 参数 接收不了

    <form method="get" action="/test/index.php?mod=123456" > <input type=&q ...

  3. Spring学习之代理

    Spring的核心就是IOC和AOP IOC就是控制反转:   就是用配置文件的方式给javabean 赋值. 正常的在程序里;用new 的方式创建一个对象的时候,他就固定了值, 如果是注入的方式的话 ...

  4. Ubuntu系统的安装

    在上一篇博客中,我们已经建立了一个“空白”的虚拟Ubuntu镜像,在这篇博客中,我们将介绍如何安装并进入完整的Ubuntu系统. 写在前面:不同版本的系统在安装过程中,有些操作可能会不同,但是其核心步 ...

  5. C# Thread多线程学习

    自我学习理解:一个程序中包括多个进程,每个进程包括多个线程,多个线程可同时做不同的事情(说是同时,但它是交换执行的,人感觉像是同时罢了). 优点:提高CPU的使用率. 线程同步:同步就是指一个线程要等 ...

  6. SVG

    目前SVG在国内的使用并不常见,并且关于svg的相关js库也不多,这里指出两款svg的库Snap.svg和svg.js,Snap.svg张鑫旭的博客上有关于他的使用APi http://www.zha ...

  7. 回顾javase点滴

    数据类型 8种基本数据类型和引用类型 数据类型 占用位数 存储方式 最小值 最大值 默认值 byte 8 1+7 -128(-2^7) 127(2^7-1) 0 short 16 1+15 -3276 ...

  8. PHPCMS二次开发教程

    PHPCMS V9 结构设计 根目录|–api  结构文件目录|–caches 缓存文件目录   |– configs 系统配置文件目录   |– caches_* 系统缓存目录|–phpcms  p ...

  9. Navicat Premium 未保存的SQL如何找回 ?

    在使用 Navicat Premium 编辑SQL的过程中为防止程序意外崩溃,已经将编辑的SQL都已经备份. 备份存放目录地址:C:\Users\{登录用户名}\Documents\Navicat\M ...

  10. (转)搜索Maven仓库 获取 groupid artifactId

    转载自:http://blog.csdn.net/z69183787/article/details/22188561 使用Maven进行开发的时候,比较常见的一个问题就是如何寻找我要的依赖,比如说, ...