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. System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本

    问题描述: c#程序本机运行没有问题,部署到正式环境后报错: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本 思考: 难道真是客户端的问题吗? ...

  2. json 基础

    json格式 JSON格式:http://www.json.org/ python和JSON的关系请参考:http://docs.python.org/library/json.html JSON建构 ...

  3. CentOS安装视频播放器SMPlayer

    首先下载rpmforg,下载对应的版本,就是对应CentOS版本,还有32位与64位也要对应上.地址如下: http://wiki.centos.org/AdditionalResources/Rep ...

  4. Interface Comparator

    int compare(T o1, T o2) Compares its two arguments for order. Returns a negative integer, zero, or a ...

  5. HDU 2473 Junk-Mail Filter(并查集+删点,设立虚父节点/找个代理)

    题意:有N封邮件, 然后又两种操作,如果是M X Y , 表示X和Y是相同的邮件.如果是S X,那么表示对X的判断是错误的,X是不属于X当前所在的那个集合,要把X分离出来,让X变成单独的一个.最后问集 ...

  6. JsRender系列demo(1)-insert-data

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. java基础知识回顾之---java String final类普通方法的应用之“模拟字符串Trim方法”

    /* * 4,模拟一个trim功能一致的方法.去除字符串两端的空白  * 思路: * 1,定义两个变量. * 一个变量作为从头开始判断字符串空格的角标.不断++. * 一个变量作为从尾开始判断字符串空 ...

  8. SDUT1500 Message Flood

    以前做过的用的字典树,可是貌似现在再用超内存....求解释... 问了LYN用的map函数做的,又去小小的学了map函数.... http://wenku.baidu.com/view/0b08cec ...

  9. 深入浅出Java并发包—原子类操作

    我们知道,JDK1.5以后引入了并发包(java.util.concurrent)用于解决多CPU时代的并发问题,而并发包中的类大部分是基于Queue的并发类,Queue在大多数情况下使用了原子类(A ...

  10. jsp片段

    转载自:http://blog.csdn.net/lovejavaydj/article/details/7293145 使用jspf 在开发中写jsp页面时,通常都要通过如下方式在jsp文件头部引入 ...