3887 - Slim Span
Time limit: 3.000 seconds

Given an undirected weighted graph G <tex2html_verbatim_mark>, you should find one of spanning trees specified as follows.

The graph G <tex2html_verbatim_mark>is an ordered pair (VE) <tex2html_verbatim_mark>, where V <tex2html_verbatim_mark>is a set of vertices {v1v2,..., vn} <tex2html_verbatim_mark>and E <tex2html_verbatim_mark>is a set of undirected edges {e1e2,..., em} <tex2html_verbatim_mark>. Each edge e  E <tex2html_verbatim_mark>has its weight w(e) <tex2html_verbatim_mark>.

A spanning tree T <tex2html_verbatim_mark>is a tree (a connected subgraph without cycles) which connects all the n <tex2html_verbatim_mark>vertices with n - 1 <tex2html_verbatim_mark>edges. The slimness of a spanning tree T <tex2html_verbatim_mark>is defined as the difference between the largest weight and the smallest weight among the n - 1 <tex2html_verbatim_mark>edges of T <tex2html_verbatim_mark>.

<tex2html_verbatim_mark>

For example, a graph G <tex2html_verbatim_mark>in Figure 5(a) has four vertices {v1v2v3v4} <tex2html_verbatim_mark>and five undirected edges {e1e2,e3e4e5} <tex2html_verbatim_mark>. The weights of the edges are w(e1) = 3 <tex2html_verbatim_mark>, w(e2) = 5 <tex2html_verbatim_mark>, w(e3) = 6 <tex2html_verbatim_mark>, w(e4) = 6 <tex2html_verbatim_mark>, w(e5) = 7 <tex2html_verbatim_mark>as shown in Figure 5(b).

=6in <tex2html_verbatim_mark>

There are several spanning trees for G <tex2html_verbatim_mark>. Four of them are depicted in Figure 6(a)∼(d). The spanning tree Ta<tex2html_verbatim_mark>in Figure 6(a) has three edges whose weights are 3, 6 and 7. The largest weight is 7 and the smallest weight is 3 so that the slimness of the tree Ta <tex2html_verbatim_mark>is 4. The slimnesses of spanning trees Tb <tex2html_verbatim_mark>, Tc <tex2html_verbatim_mark>and Td <tex2html_verbatim_mark>shown in Figure 6(b), (c) and (d) are 3, 2 and 1, respectively. You can easily see the slimness of any other spanning tree is greater than or equal to 1, thus the spanning tree Td <tex2html_verbatim_mark>in Figure 6(d) is one of the slimmest spanning trees whose slimness is 1.

Your job is to write a program that computes the smallest slimness.

Input

The input consists of multiple datasets, followed by a line containing two zeros separated by a space. Each dataset has the following format.

n <tex2html_verbatim_mark>m <tex2html_verbatim_mark>
a1 <tex2html_verbatim_mark>b1 <tex2html_verbatim_mark>w1 <tex2html_verbatim_mark>
 <tex2html_verbatim_mark>
am <tex2html_verbatim_mark>bm <tex2html_verbatim_mark>wm <tex2html_verbatim_mark>

Every input item in a dataset is a non-negative integer. Items in a line are separated by a space.

n <tex2html_verbatim_mark>is the number of the vertices and m <tex2html_verbatim_mark>the number of the edges. You can assume 2n100 <tex2html_verbatim_mark>and 0mn(n - 1)/2<tex2html_verbatim_mark>. ak <tex2html_verbatim_mark>and bk <tex2html_verbatim_mark>(k = 1,..., m) <tex2html_verbatim_mark>are positive integers less than or equal to n <tex2html_verbatim_mark>, which represent the two verticesvak <tex2html_verbatim_mark>and vbk <tex2html_verbatim_mark>connected by the k <tex2html_verbatim_mark>-th edge ek <tex2html_verbatim_mark>. wk <tex2html_verbatim_mark>is a positive integer less than or equal to 10000, which indicates the weight of ek <tex2html_verbatim_mark>. You can assume that the graph G = (VE) <tex2html_verbatim_mark>is simple, that is, there are no self-loops (that connect the same vertex) nor parallel edges (that are two or more edges whose both ends are the same two vertices).

Output

For each dataset, if the graph has spanning trees, the smallest slimness among them should be printed. Otherwise, `-1' should be printed. An output should not contain extra characters.

Sample Input

4 5
1 2 3
1 3 5
1 4 6
2 4 6
3 4 7
4 6
1 2 10
1 3 100
1 4 90
2 3 20
2 4 80
3 4 40
2 1
1 2 1
3 0
3 1
1 2 1
3 3
1 2 2
2 3 5
1 3 6
5 10
1 2 110
1 3 120
1 4 130
1 5 120
2 3 110
2 4 120
2 5 130
3 4 120
3 5 110
4 5 120
5 10
1 2 9384
1 3 887
1 4 2778
1 5 6916
2 3 7794
2 4 8336
2 5 5387
3 4 493
3 5 6650
4 5 1422
5 8
1 2 1
2 3 100
3 4 100
4 5 100
1 5 50
2 5 50
3 5 50
4 1 150
0 0

Sample Output

1
20
0
-1
-1
1
0
1686
50 枚举最小边,求得MST
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
#define INF 0x3f3f3f3f
#define N 110
#define M 100010 struct Edge
{
int u,v,w;
bool operator <(const Edge &t)const
{
return w<t.w;
}
}edge[M]; int n,m;
int f[N]; void init()
{
for(int i=;i<=n;i++) f[i]=i;
}
int Find(int x)
{
if(x!=f[x]) f[x]=Find(f[x]);
return f[x];
}
bool UN(int x,int y)
{
x=Find(x);
y=Find(y);
if(x==y) return ;
f[x]=y;
return ;
}
int kruskal(int s)
{
init();
int ret;
for(int i=s;i<=m;i++)
{
if(UN(edge[i].u,edge[i].v)) ret=edge[i].w;
}
int cnt=;
for(int i=;i<=n;i++) if(f[i]==i) cnt++;
if(cnt>) return -;
return ret;
}
int main()
{
int ans;
while(scanf("%d%d",&n,&m),n||m)
{
ans=INF;
for(int i=;i<=m;i++) scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
sort(edge+,edge+m+);
for(int i=;i<=m;i++)
{
int t=kruskal(i);
if(t==-) break;
ans=min(ans,t-edge[i].w);
}
if(ans==INF) ans=-;
printf("%d\n",ans);
}
return ;
}

[LA 3887] Slim Span的更多相关文章

  1. LA 3887 - Slim Span 枚举+MST

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  2. uvalive 3887 Slim Span

    题意: 一棵生成树的苗条度被定义为最长边与最小边的差. 给出一个图,求其中生成树的最小苗条度. 思路: 最开始想用二分,始终想不到二分终止的条件,所以尝试暴力枚举最小边的长度,然后就AC了. 粗略估计 ...

  3. 最小生成树POJ3522 Slim Span[kruskal]

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7594   Accepted: 4029 Descrip ...

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

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

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

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

  6. POJ-3522 Slim Span(最小生成树)

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8633   Accepted: 4608 Descrip ...

  7. Slim Span(Kruskal)

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

  8. POJ 3522 Slim Span(极差最小生成树)

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9546   Accepted: 5076 Descrip ...

  9. UVALive-3887 Slim Span (kruskal)

    题目大意:定义无向图生成树的最大边与最小边的差为苗条度,找出苗条度最小的生成树的苗条度. 题目分析:先将所有边按权值从小到大排序,在连续区间[L,R]中的边如果能构成一棵生成树,那么这棵树一定有最小的 ...

随机推荐

  1. [resource]23个python的机器学习包

    23个python的机器学习包,从常见的scikit-learn, pylearn2,经典的matlab替代orange, 到最新最酷的Theano(深度学习)和torch 7 (well,其实lua ...

  2. tar命令,转来等用

    tar 解压缩命令 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令 ...

  3. c++ g++3.4.5 g++4.8.2 由编译器引起的编译异常

    #include <memory> #include <string> #include <iostream> class Student { public: St ...

  4. POJ 3553 Task schedule

    原题链接:http://poj.org/problem?id=3553 这道题主要就是贪心思想吧,对于每个job,根据其截止时间 dj 从小到大排序,我们必须要尽快把dj最小的job完成掉,这样才能使 ...

  5. jquery的一些用法

    一.选择器 单选按钮:$(this).find(".answer").find("input[name='answer_" + id + "']:ch ...

  6. 从String类看写C++ class需要注意的地方

    #include <iostream> #include <string.h> using namespace std; class String { char* m_data ...

  7. mysql之sql语句导入与导出讲解

    导出SQL:mysqldump -u root -p 数据库名 [表名1 表名2] > 输出地址其中表名可选 本机测试实例:

  8. 【Asp.Net-- 杂七杂八】的代码

    Request.Url.PathAndQuery public RedirectResult AddToCart(Cart cart, int productId, string returnUrl) ...

  9. Oracle session连接数和inactive的问题记录

    Oracle session连接数和inactive的问题记录 http://timnity.javaeye.com/blog/280383 从上周起,服务器Oracle数据库出现问题,用不到半天,就 ...

  10. D&F学数据结构系列——红黑树

    红黑树 定义:一棵二叉查找树如果满足下面的红黑性质,则为一棵红黑树: 1)每个结点不是红的就是黑的 2)根结点是黑的 3)每个叶结点是黑的 4)如果一个结点是红的,它的两个儿子都是黑的(即不可能有两个 ...