还是畅通工程

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

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
 
题解:并查集问题。用结构体来表示每一条路的起点、终点和距离。用贪心的思想将其从小到大排序,再由距离最短的路开始连通,合并集合前判断是否会成环,若不能成环则sum    加上这条边的值。
 

代码:

#include<stdio.h>
struct path
{
  int a;  //a地
  int b;   //b地
  int fee;  //距离
};
struct path num[10000];
int father[10000],sum;
void sort(struct path num[],int n)    //排序
{
  struct path term;
  int i,j,flag;
  for(i=0; i<n; i++)
  {
    flag=i;
    for(j=i+1; j<n; j++)
      if(num[j].fee<num[flag].fee)
        flag=j;
    term=num[i];
    num[i]=num[flag];
    num[flag]=term;
  }
}

int find(int a)
{
  if(father[a]!=a)
    father[a]=find(father[a]);
  return father[a];
}

void merge(struct path pre)
{
  int x,y;
  x=find(pre.a);
  y=find(pre.b);
  if(x!=y)
  {
    father[x]=y;
    sum+=pre.fee;
  }
 }
int main()
{
  int n,i;
  while(1)
  {
    scanf("%d",&n);
    if(n==0)
      break;
    for(i=1; i<=n; i++)
      father[i]=i;
    for(i=0; i<n*(n-1)/2; i++)
      scanf("%d%d%d",&num[i].a,&num[i].b,&num[i].fee);
    sort(num,n*(n-1)/2);
    sum=0;
    for(i=0; i<n*(n-1)/2; i++)
      merge(num[i]);
    printf("%d\n",sum);
  }
  return 0;
}

最新文章

  1. drawable微技巧以及layout的小知识
  2. VisualStudio控制台输出窗口一闪而过
  3. 浅谈html5及其新特性
  4. 关于sizeof 跟strlen 的区别
  5. web进阶之jQuery操作DOM元素&amp;&amp;MySQL记录操作&amp;&amp;PHP面向对象学习笔记
  6. Windows Platform Predefined Macros
  7. Git subtree和Git submodule
  8. php getenv 和 putenv 用法
  9. python学习(序章)
  10. c#操作MySQL数据库中文出现乱码(很多问号)的解决方法
  11. Treap的读书笔记2
  12. Thinkphp入门三—框架模板、变量(47)
  13. 2018-2019-2 网络对抗技术 20165319 Exp3 免杀原理与实践
  14. .NET 内存分配笔记
  15. 语音识别传统方法(GMM+HMM+NGRAM)概述
  16. 剑指offer——python【第28题】数组 中出现次数超过一半的数字
  17. android -------- 颜色的半透明效果配置
  18. HDU.4035.Maze(期望DP)
  19. go post 上传文件的例子
  20. RDLC_部署到不同的浏览器

热门文章

  1. 字符串处理(正则表达式、NSScanner扫描、CoreParse解析器)-b
  2. tf.image.resize_bilinear 图像缩放,双线性插值-图像中心对齐
  3. UVA 11488 Hyper Prefix Sets (Trie)
  4. android:模拟水波效果的自己定义View
  5. ios32---线程的状态
  6. ios25---图片拉伸
  7. 【OI新闻】2016.10.06
  8. not syncing : corrupted stack end detected inside scheduler
  9. mysql status关键字 数据表设计中慎重使用
  10. 7章 Admin