/*

    最大路与最小路的问题:
这道题看似简单,但是若不知道思路将无法写出。 思路:最小生成树很容易求出,但是最大值与最小值只差很难保证是最小的,
比如:1 5 5 6 100 101
很明显101 - 5 < 100 - 1
所以:只需要枚举到m条边的情况就行。
*/ #include<iostream>
#include<algorithm>
#include<cstdio> using namespace std; class kruskal
{
public:
int a,b,value;
}edge[]; int n,m; int f[];//并查集
int s[];//根的数目 int ans; bool cmp(kruskal a,kruskal b)
{
return a.value < b.value;
} int Find(int x)
{
if(f[x] == x)
return x;
else
f[x] = Find(f[x]);
return f[x];
} int Union(int x,int y)
{
int a = Find(x);
int b = Find(y);
if(a == b)
return ;
else if(s[a] <= s[b]){ //使用了优化并查集
f[a] = b;
s[b] += s[a];
}
else {
f[b] = a;
s[a] += s[b];
}
return ;
} int kruskal(int i)
{
int pos = ;
int r;
for( ;i <= m; i++){
if(Union(edge[i].a,edge[i].b)){
pos++;
if(pos == )
r = edge[i].value;
if(pos == n - ){
ans =min(ans,edge[i].value - r);
}
}
}
return ans;
} int main()
{
//freopen("in.txt","r",stdin);
while(cin>>n>>m){
if(n == && m == )
break;
for(int i = ;i <= m; i++)
cin>>edge[i].a>>edge[i].b>>edge[i].value;
ans = ;
sort(edge+,edge+m+,cmp);
for(int i = ;i <= m - n + ; i++){
for(int j = ;j <= n; j++) {
f[j] = j;
s[j] = ;
}
ans = kruskal(i);
}
if(ans == ){
printf("-1\n");
}
else
printf("%d\n",ans);
}
return ;
}

UVA 1395 (kruskal)的更多相关文章

  1. UVa 1395 苗条的生成树(Kruskal+并查集)

    https://vjudge.net/problem/UVA-1395 题意: 给出一个n结点的图,求苗条度(最大边减最小边的值)尽量小的生成树. 思路: 主要还是克鲁斯卡尔算法,先仍是按权值排序,对 ...

  2. UVA - 1395 Slim Span (最小生成树Kruskal)

    Kruskal+并查集. 点很少,按边权值排序,枚举枚举L和R,并查集检查连通性.一旦连通,那么更新答案. 判断连通可以O(1),之前O(n)判的,第一次写的过了,后来T.. #include< ...

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

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

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

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

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

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

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

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

  7. UVA 1395 Slim Span

    题意: 要求的是所有生成树中最大边与最小边差值最小的那个. 分析: 其实可以利用最小瓶颈生成树,就是最小生成树这一性质,枚举原图的最小边,然后找相应生成树的最大边 代码: #include <i ...

  8. Buy or Build UVA - 1151 Kruskal+枚举

    题意: 大概意思是有 n 个点,现在有 q 个方案 ,第 i 个方案耗费为 ci ,使 Ni 个点联通 ,当然也可以直接使两点联通 ,现求最小生成树的代价. 两点直接联通的代价是欧几里得距离的平方: ...

  9. 【uva 1395】Slim Span(图论--最小生成树+结构体快速赋值 模版题)

    题意:给一个N(N<=100)个点的联通图(无自环和平行边),求苗条度(最大边-最小边的值)尽量小的生成树. 解法:枚举+Kruskal.先从小到大排序边,枚举选择的最小的边. 1 #inclu ...

随机推荐

  1. <script type="text/javascript" src="<%=path %>/pages/js/arsis/area.js?v=1.01"></script> 为什么在最后加? v+1.01

    不写也可以 是为了js改变以后 ,名字未变 ,如果原来有的浏览器加载 了,遇到相同名字的就是引用缓存,不在从新加载.会出现错误.加上后 会重新加载. css 引用后面也一样.

  2. Javascript生成随机数

    随机数在前后端都比较常用,用途也较广.这里记录一下前端的实现方法,代码比较简单,封装成函数可随时调用. 具体如下: function getRandNum(n){ return Math.floor( ...

  3. 3、Android Intent Flag的介绍

    介绍:http://blog.csdn.net/luckily01/article/details/7737499

  4. StoryBoard解惑

    可以把StoryBoard看做是一组viewController对应的xib,以及它们之间的转换方式的集合.在StoryBoard中不仅可以看到 每个ViewController的布局样式,也可以明确 ...

  5. ov5648摄像头调试

    工作平台:MTK8389 sensor:ov5648 今天调试这颗摄像头的心得就是:首先得把上电时序弄对,I2C才能通讯,然后就是ID都要写对.

  6. dos2unix

    dos2unix 实际上就是把文本文件里面的^M删除,我一般懒得用这个命令,vi里面用一个命令(:%s/^m//g)删除即可. 用法举例: dos2unix a.txt b.txt 要把一批文件都do ...

  7. C++ const

    在程序中经常遇到const,但是对他还不是非常了解,今天看到一篇文章讲挺好的,所以复制过来了.... 原文链接:http://blog.csdn.net/Eric_Jo/article/details ...

  8. BootStrap 的modal 中使用typeahead

    刚开始怎么也不现实,在页面上显示正常. 调试发现是下拉框被modal遮挡住了, 找到样式dropdown-menu    修改z-index值为2000后,显示正常.(modal的z-index值为1 ...

  9. hive学习

    大数据的仓库Hive学习  10期-崔晓光 2016-06-20  大数据   hadoop   10原文链接 我们接着之前学习的大数据来学习.之前说到了NoSql的HBase数据库以及Hadoop中 ...

  10. python sqlite 插入的数据含有变量,结果不一致

    def insert(): conn = sqlite3.connect("sqlite.db") print "open database passed" t ...