[LA 3887] Slim Span
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 (V, E) <tex2html_verbatim_mark>, where V <tex2html_verbatim_mark>is a set of vertices {v1, v2,..., vn} <tex2html_verbatim_mark>and E <tex2html_verbatim_mark>is a set of undirected edges {e1, e2,..., 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>.
For example, a graph G <tex2html_verbatim_mark>in Figure 5(a) has four vertices {v1, v2, v3, v4} <tex2html_verbatim_mark>and five undirected edges {e1, e2,e3, e4, e5} <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).
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 = (V, E) <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的更多相关文章
- LA 3887 - Slim Span 枚举+MST
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- uvalive 3887 Slim Span
题意: 一棵生成树的苗条度被定义为最长边与最小边的差. 给出一个图,求其中生成树的最小苗条度. 思路: 最开始想用二分,始终想不到二分终止的条件,所以尝试暴力枚举最小边的长度,然后就AC了. 粗略估计 ...
- 最小生成树POJ3522 Slim Span[kruskal]
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7594 Accepted: 4029 Descrip ...
- POJ 3522 Slim Span 最小差值生成树
Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...
- poj 3522 Slim Span (最小生成树kruskal)
http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions ...
- POJ-3522 Slim Span(最小生成树)
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8633 Accepted: 4608 Descrip ...
- Slim Span(Kruskal)
题目链接:http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Subm ...
- POJ 3522 Slim Span(极差最小生成树)
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9546 Accepted: 5076 Descrip ...
- UVALive-3887 Slim Span (kruskal)
题目大意:定义无向图生成树的最大边与最小边的差为苗条度,找出苗条度最小的生成树的苗条度. 题目分析:先将所有边按权值从小到大排序,在连续区间[L,R]中的边如果能构成一棵生成树,那么这棵树一定有最小的 ...
随机推荐
- 一个SQL Server 2008 R2 死锁的问题解决
问题场景:在客户那碰到一个操作卡死的现象 问题解决: 1.如何挂钩是死锁问题:通过代码跟踪,发现是指执行一个SQL语句超时,因此猜想可能是表锁住了 2.如果确认是思索问题:通过SQL发现死锁,以下是相 ...
- UVALive 4872 Underground Cables 最小生成树
题目链接: 题目 Underground Cables Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %ll ...
- myeclipse一直bulid workspace 的解决
解决方法转自: http://zhidao.baidu.com/link?url=gCj0XzorUUshtSFG2jXh6-Bxn28_LpcbTYasbgk9Qja_kw8Ex2kLzxFSYHN ...
- Matlab中sort函数的使用
主要看大神们如何使用,先模仿. [~,y] = sort(v),如果v是向量,那么y返回的是v中的下标(不好表达),看下面的,发现y是是下标,对应的是c中元素*(由小到大排序).使用c(y)就得到了由 ...
- [转载]AFX_MANAGE_STATE关于资源切换
应用程序进程本身及其调用的每个DLL模块都具有一个全局唯一的HINSTANCE句柄,它们代表了DLL或EXE模块在进程虚拟空间中的起始地址.进程本身的模块句柄一般为0x400000,而DLL模块的缺省 ...
- setblendstate & setdepthstencilstate
http://msdn.microsoft.com/en-us/library/windows/desktop/ff476462(v=vs.85).aspx blendstate blendfacto ...
- Guava文档翻译之 Service
概览 Guava的接口代表了一个有运行状态的对象,有启动和停止的方法.比如网络服务器,RPC服务器,以及计时器等,都可以实现Service接口.掌管像这样的服务的状态,需要正确地管理启动和关闭,因此会 ...
- POJ 1785 Binary Search Heap Construction(裸笛卡尔树的构造)
笛卡尔树: 每个节点有2个关键字key.value.从key的角度看,这是一颗二叉搜索树,每个节点的左子树的key都比它小,右子树都比它大:从value的角度看,这是一个堆. 题意:以字符串为关键字k ...
- ***解决PHP输出多余的空格或换行
用CI框架写APP后台接口的时候,返回的JSON前面有多余的2哥换行,首先排查的是BOM,结果问题依旧 再就是排查<?php ?> 标签外没有多余的回车.换行,结果发现确实有多余的换行,去 ...
- C# 构造函数的使用方法
C#构造函数是一个特殊的类方法.在很多方面,包括访问修饰符.重载以及参数列表的语法等方面,构造函数与普通的方法是类似的.然而,在使用方面以及行为方面,构造函数也具有许多特殊的语法和语义规则. 下面列出 ...