给你一个图,

求一个生成树, 边权Max – Min 要最小,输出最小值, 不能构成生成树的 输出 -1;

思路:

Keuksal 算法, 先排序边, 然后枚举 第一条边, 往后加入边, 直到有 n-1 条边的树, 求出那个值, 把可能的值取MIN;

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<set>
  6. using namespace std;
  7. const int maxn = 100 + 7;
  8. set<int> NUM;
  9. struct Edges
  10. {
  11. int u, v;
  12. int val;
  13. bool operator < (const Edges a) const { return val < a.val; }
  14. }E[maxn * maxn];
  15.  
  16. int Pre[maxn];
  17.  
  18. int cnt,Max,n,m;
  19. void ADD(int u,int v,int val)
  20. {
  21. E[cnt].u = u, E[cnt].v = v, E[cnt].val = val;
  22. cnt++;
  23. }
  24.  
  25. void Init()
  26. {
  27. for(int i = 0; i < maxn; ++i) Pre[i] = i;
  28. }
  29.  
  30. int Find(int x)
  31. {
  32. int r = x;
  33. while(r != Pre[r]) r = Pre[r];
  34. return Pre[x] = r;
  35. }
  36.  
  37. bool Union(int x,int y)
  38. {
  39. int ax = Find(x), ay = Find(y);
  40. if(ax == ay) return false;
  41. // if(ax == x || ay == y) CC--;
  42. Pre[ax] = ay;
  43. // CC += 2;
  44. return true;
  45. }
  46.  
  47. bool MST (int x)
  48. {
  49. int num = 0;
  50. Max = -1;
  51. for(int i = 0; i < maxn; ++i) Pre[i] = i;
  52. for(int i = x; i < m; ++i)
  53. {
  54. int a = Find(E[i].v), b = Find(E[i].u);
  55. if(a == b) continue;
  56. Pre[a] = b;
  57. Max = max(Max,E[i].val);
  58. if(++num == n-1) return true;
  59. }
  60. return false;
  61. }
  62. int main()
  63. {
  64. while(~scanf("%d%d",&n,&m) && (n + m))
  65. {
  66. cnt = 0;
  67. int a, b, c;
  68. for(int i = 0; i < m; ++i)
  69. {
  70. scanf("%d%d%d",&a,&b,&c);
  71. ADD(a,b,c);
  72. }
  73. int ans = 999999999;
  74. sort(E,E+m);
  75. for(int i = 0; i < m; ++i)
  76. {
  77. if(MST(i))
  78. {
  79. ans = min(ans, Max - E[i].val);
  80. }
  81. }
  82. if(ans == 999999999) ans = -1;
  83. printf("%d\n",ans);
  84. }
  85. return 0;
  86. }

UVA 1395 MST的更多相关文章

  1. UVA 1395 Slim Span (最小生成树,MST,kruscal)

    题意:给一个图,找一棵生成树,其满足:最大权-最小权=最小.简单图,不一定连通,权值可能全相同. 思路:点数量不大.根据kruscal每次挑选的是最小权值的边,那么苗条度一定也是最小.但是生成树有多棵 ...

  2. UVa 1395 - Slim Span(最小生成树变形)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. UVA 1395 Slim Span 最小生成树

    题意: 给你一个图,让你求这个图中所有生成树中满足题目条件的,这个条件是生成树中最长边与最短边的差值最小. 思路: 根据最小瓶颈生成树的定义:在一个有权值的无向图中,求一个生成树最大边的权值尽量小.首 ...

  4. UVA 1395 (kruskal)

    /* 最大路与最小路的问题: 这道题看似简单,但是若不知道思路将无法写出. 思路:最小生成树很容易求出,但是最大值与最小值只差很难保证是最小的, 比如:1 5 5 6 100 101 很明显101 - ...

  5. UVA 1395 苗条的生成树(最小生成树+并查集)

    苗条的生成树 紫书P358 这题最后坑了我20分钟,怎么想都对了啊,为什么就wa了呢,最后才发现,是并查集的编号搞错了. 题目编号从1开始,我并查集编号从0开始 = = 图论这种题真的要记住啊!!题目 ...

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

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

  7. UVa 1395 Slim Span【最小生成树】

    题意:给出n个节点的图,求最大边减最小边尽量小的值的生成树 首先将边排序,然后枚举边的区间,判定在该区间内是否n个点连通,如果已经连通了,则构成一颗生成树, 则此时的苗条度是这个区间内最小的(和kru ...

  8. UVa 1395 (最小生成树) Slim Span

    题意: 规定一棵生成树的苗条度为:最大权值与最小权值之差.给出一个n个顶点m条边的图,求苗条度最小的生成树. 分析: 按照边的权值排序,枚举边集的连续区间[L, R]的左边界L,如果这些区间刚好满足一 ...

  9. 【UVA 1395】 Slim Span (苗条树)

    [题意] 求一颗生成树,满足最大边和最小边之差最小 InputThe input consists of multiple datasets, followed by a line containin ...

随机推荐

  1. 056、macvlan网络结构分析(2019-03-25 周一)

    参考https://www.cnblogs.com/CloudMan6/p/7383919.html   macvlan不依赖linux bridge   brctl show 可以确认没有创建新的b ...

  2. 跨域请求传递Cookie问题

    问题描述 前后端完全分离的项目,前端使用Vue + axios,后端使用SpringMVC,容器为Tomcat. 使用CORS协议解决跨域访问数据限制的问题,但是发现客户端的Ajax请求不会自动带上服 ...

  3. Less 创建css3动画@keyframes函数

    封装: /** * animation */ .keyframes (@prefix,@name,@content) when (@prefix=def) { @keyframes @name { @ ...

  4. Devexpress GridControl切换数据源

    gridControl1.DataSource = dt1; (gridControl1.DefaultView as GridView).Columns.Clear();//切换前需要先把列清空了. ...

  5. 清除 SQL Server Management Studio 服务器名称历史记录

    Ø  前言 在开发过程中,经常使用 SQL Server Management Studio 连接本地或远程 SQL Server 服务器,时间长了可能有些名称就不用了或者重复了,SQL Server ...

  6. 10.tesseract

    1.Tesseract-OCR简介  一个Google支持的开源的OCR图文识别开源项目.支持多种语言(我使用的是3.02 版本,支持包括英文,简体中文,繁体中文),支持Windows,Linux,M ...

  7. 【SRM-07 D】天才麻将少女KPM

    Description 天才麻将少女KPM立志要在日麻界闯出一番名堂.KPM上周叒打了n场麻将,但她这次又没控分,而且因为是全市参与的麻将大赛,所以她的名次范围是0..10^5.名次可能等于0是因为K ...

  8. influxdb

    1.安装Centos# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.1.0.x86_64.rpm# rpm -ivh inf ...

  9. [C++]头文件<algorithm>

    本博文仅示例一些常用的函数: sort.for_each. 1. sort /* STL - <algorithm> - sort template< class RandomIt, ...

  10. animation属性

    文章中转站,因为涉及到动画效果,还是看文笔比较好的博主吧~ CSS3(三)Animation 入门详解 css3中变形与动画(三) CSS3 Animation 是由三部分组成. 关键帧(keyfra ...