题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1233

还是畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 56123    Accepted Submission(s): 25465

Problem Description
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
 
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
 
Output
对每个测试用例,在1行里输出最小的公路总长度。
 
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
 
Sample Output
3
5

Hint

Hint

Huge input, scanf is recommended.

分析:
 裸Kruskal算法,注意给你边的个数不是n个,而是n*(n-1)/2个
代码如下:

#include<bits/stdc++.h>
using namespace std;
#define max_v 10005
struct edge
{
int x,y;
int w;
};
edge e[max_v];
int rk[max_v];
int pa[max_v];
int sum;
bool cmp(edge a,edge b)
{
return a.w<b.w;
}
void make_set(int x)
{
pa[x]=x;
rk[x]=0;
}
int find_set(int x)
{
if(x!=pa[x])
pa[x]=find_set(pa[x]);
return pa[x];
}
void union_set(int x,int y,int w)
{
x=find_set(x);
y=find_set(y);
if(x==y)
return ;
if(rk[x]>rk[y])
{
pa[y]=x;
}else
{
if(rk[x]==rk[y])
rk[y]++;
pa[x]=y;
}
sum+=w;
return ;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
sum=0;
if(n==0)
break;
for(int i=1;i<=n;i++)
make_set(i);
n=(n-1)*n/2.0;//题目要求的,而不是算法要求的
for(int i=0;i<n;i++)
{
scanf("%d %d %d",&e[i].x,&e[i].y,&e[i].w);
}
sort(e,e+n,cmp);
for(int i=0;i<n;i++)
{
union_set(e[i].x,e[i].y,e[i].w);
}
printf("%d\n",sum);
}
}
/*按照边的权重排序,每次选择max/min 选择某编的时候如果构成了环,就不选
//解决:加权无向图

  

最新文章

  1. oracle Net Manager 服务命名无法配置(无法新建、添加服务名)
  2. shell替换一个或多个空格为逗号
  3. Http返回码
  4. 解决谷歌浏览器和360浏览器 input 自动填充淡黄色背景色的问题
  5. httpd 虚拟主机建立之访问机制及其日志定义
  6. mysql的point类型查询处理
  7. android showAsDropDown的用法属性介绍
  8. Activity组件的生命周期
  9. UIImage创建图片的两种方式的区别
  10. mysql修改表和列
  11. CentOS7: How to install Desktop Environments on CentOS 7?
  12. 设计模式-发布订阅模式(javaScript)
  13. Mongodb分片集群技术+用户验证
  14. MySQL InnoDB 逻辑存储结构
  15. 《Java大学教程》—第4章 方法的实现
  16. linux 测试 get 请求 跳过SSL证书验证
  17. Java操作MongoDB:连接&amp;增&amp;删&amp;改&amp;查
  18. English trip V1 - 21. I dreamed dream Teacher:Corrine Key: past tense(过去式)
  19. Chapter2:Qt5模板库,工具类及控件
  20. springboot 启动类CommandLineRunner(转载)

热门文章

  1. javascript判断浏览器支持CSS3属性
  2. border实现三角形的原理
  3. 理解webpack4.splitChunks之其余要点
  4. bootstrap学习笔记细化(表格)
  5. Setting up a Single Node Cluster Hadoop on Ubuntu/Debian
  6. what&#39;s up ? docker, all right.
  7. 彻底澄清c/c++指针概念
  8. Windows事件--重复事件检测
  9. python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法
  10. linux 下 eclipse 开发环境的搭建