题意:求图的一个生成树使其最大边权与最小边权的差值最小,求其最小值

思路:利用贪心思想,先对边进行排序,然后从最小边开始枚举,每次进行kruskal向右加入边,若加入边刚好能遍历所有点,记录最后加入的边与第一个边的差值。最后得到最小值。

在kruskal枚举第一个边的时候没有加入判断是否剩下的边能够组成一个树,结果WA了几次,但是怎么觉得不加也没所谓呢。。?

代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #define MAXN 50050
  6. #define inf 1000000000
  7. using namespace std;
  8.  
  9. int pre[108];
  10. int n,m,temp;int l,r;int ans;
  11. struct Edge{
  12. int x,y,len;
  13. }edge[MAXN];
  14. int cmp(Edge a,Edge b)
  15. {
  16. return a.len<b.len;
  17. }
  18. int find(int x)
  19. {
  20. if(x!=pre[x])
  21. pre[x]=find(pre[x]);
  22. return pre[x];
  23. }
  24. void kruskal(int x)
  25. {
  26. int num;
  27. for(int i=1;i<=n;i++)
  28. pre[i]=i;
  29. l=edge[x].len;num=0;
  30. //cout<<l<<endl;
  31. for(int i=x;i<=temp;i++)
  32. {
  33.  
  34. int a=find(edge[i].x);
  35. int b=find(edge[i].y);
  36. if(a!=b)
  37. {
  38. pre[a]=b;
  39. num++;
  40.  
  41. }
  42. if(num==n-1)
  43. {
  44. r=edge[i].len;
  45. if(ans>r-l)ans=r-l;
  46. //cout<<ans<<endl;
  47. return ;
  48. }
  49. }
  50. }
  51. int main()
  52. {
  53. while(scanf("%d%d",&n,&m)!=EOF)
  54. {
  55. if(n==0&&m==0)
  56. break;
  57. ans=20050;
  58. for(int i=0;i<m;i++)
  59. {
  60. int v,w,c;
  61. scanf("%d%d%d",&v,&w,&c);
  62. edge[i].x=v;
  63. edge[i].y=w;
  64. edge[i].len=c;
  65. temp=i;
  66. }
  67. sort(edge,edge+temp+1,cmp);
  68. //cout<<edge[0].len<<' '<<edge[temp].len<<endl;
  69. for(int i=0;i<=temp&&m-i>=n-1;i++)
  70. {kruskal(i);if(ans==0)break;}
  71. if(ans!=20050)
  72. printf("%d\n",ans);
  73. else printf("-1\n");
  74. }
  75. return 0;
  76. }

poj 3522 Kruskal的更多相关文章

  1. POJ 3522 Slim Span

    题目链接http://poj.org/problem?id=3522 kruskal+并查集,注意特殊情况比如1,0 .0,1.1,1 #include<cstdio> #include& ...

  2. poj 3522 Slim Span (最小生成树kruskal)

    http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions ...

  3. POJ 3522 - Slim Span - [kruskal求MST]

    题目链接:http://poj.org/problem?id=3522 Time Limit: 5000MS Memory Limit: 65536K Description Given an und ...

  4. POJ 3522 Slim Span (Kruskal枚举最小边)

    题意: 求出最小生成树中最大边与最小边差距的最小值. 分析: 排序,枚举最小边, 用最小边构造最小生成树, 没法构造了就退出 #include <stdio.h> #include < ...

  5. poj 3522(最小生成树应用)

    题目链接:http://poj.org/problem?id=3522思路:题目要求最小生成树中最大边与最小边的最小差值,由于数据不是很大,我们可以枚举最小生成树的最小边,然后kruskal求最小生成 ...

  6. POJ 3522 Slim Span 最小差值生成树

    Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...

  7. Poj(3522),UVa(1395),枚举生成树

    题目链接:http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submis ...

  8. 最小生成树模板题POJ - 1287-prim+kruskal

    POJ - 1287超级模板题 大概意思就是点的编号从1到N,会给你m条边,可能两个点之间有多条边这种情况,求最小生成树总长度? 这题就不解释了,总结就算,prim是类似dijkstra,从第一个点出 ...

  9. POJ 1797 kruskal 算法

    题目链接:http://poj.org/problem?id=1797 开始题意理解错.不说题意了. 并不想做这个题,主要是想测试kruskal 模板和花式并查集的正确性. 已AC: /* 最小生成树 ...

随机推荐

  1. Linux(9)后台运行python程序并输出到日志文件

    后台运行python程序并标准输出到文件 现在有test.py程序要后台部署, 里面有输出内容 使用命令: nohup python -u test.py > test.log 2>&am ...

  2. C#和NewSQL更配 —— CockroachDB入门(可能是C#下的全网首发)

    阅读目录 CockroachDB是什么 环境部署 实战 性能测试 结语 一.CockroachDB是什么 CockroachDB(https://www.cockroachlabs.com)是Goog ...

  3. Java第一个程序(CMD环境)

    在新学Java配置好JDK之后,根据例子用CMD命令运行第一个java程序出错.是这样的: 1,在某一个盘(最好是英文路径),新建记事本输入java程序,例如: 保存为HelloJava.java. ...

  4. 【有意思的BUG】分享按钮 分享功能

    [分享按钮]是一个常见的功能,你可以把看到的有意思的东西分享到自己的BLOG.朋友圈之类的地方. 但是,分享出去的文本(也可以包含图片)在每个目标网站上面的格式并不是统一的,所以就存在了美感的三六九等 ...

  5. init.ora, pfile, spfile

    实例启动时,查找初始化参数文件的顺序为: spfile<sid>.oraspfile.orainit<sid>.ora 如果以上3个文件都不存在,则实例无法启动. init.o ...

  6. python连接数据库异步存储

    当同步写入数据库时,可能会发生下载速度很快,但是写入速度很慢的情况,因此我们采用异步存储写入数据库. 实现异步写入mysql数据库的思路: 1,将数据库的连接数据写入到settings文件中,供后面自 ...

  7. python 初学习 模拟用户登录

    #!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...

  8. 简单的用js打印乘法口诀表

    <script type="text/javascript"> //乘法口诀表 for (var i = 1; i < 10; i++) { for (var j ...

  9. JavaScript入门之Canvas(一): 2D Context

    概念 Canvas    是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形.例如,它可以用于绘制图形,制作照片,创建动画,甚至可以进行实时视频处理或渲染.自HTML5添 ...

  10. Maven详解(四)------ 常用的Maven命令

    这章我们讲讲几个常用的 Maven 命令.由于执行命令是在工程的基础上来的,所以我们要先创建一个 Maven 工程,具体如何创建,在上一篇博客已经介绍了:http://www.cnblogs.com/ ...