[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>.
<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).
<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 2
n
100 <tex2html_verbatim_mark>and 0
m
n(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]中的边如果能构成一棵生成树,那么这棵树一定有最小的 ...
随机推荐
- 消息传递选择:返回值 or 抛出异常
1.返回值 bool 不应该用来表示函数是否调用成功,而应该返回业务值,例如 IsExist,HasNext
- Directx3D SimpleSample Sample
在d3d 2010 june这个版本里的samples 不知道为什么SimpleSample Sample 这个 它的documents基本等于没有 Starting point for new Di ...
- StringBuffer 和 StringBuilder
如果你读过<Think in Java>,而且对里面描述HashTable和HashMap区别的那部分章节比较熟悉的话,你一定也明白了原因所在.对,就是支持线程同步保证线程安全而导致性能下 ...
- java基础知识回顾之---java StringBuffer,Stringbuilder与String的区别
public class StringBuilderTest { /** * StringBuffer和Stringbuilder :使用与内容可以被修改的字符串 * 与String的区别:Strin ...
- Spring 与 Hibernate 集成 Transactional设置为只读
@Transactional标签用于标记ServiceImpl使用事务,并且能够打开一个sessionFactory的session,并且打开事务. 如果在这个标签为@Transactional(pr ...
- java登陆验证码与JS无刷新验证
最近公司的项目的登陆模块由我负责,所以就做了个登陆小功能进行练手,其包括了用jQuery对用户名和密码进行不为null验证,和出于安全性考虑加了一个验证码的校验 别的不说先上代码 controller ...
- Ubuntu下编译运行Kamailio
kamailio----配置没有成功,这个文档过几天删除,因为这个项目的文档非常少,而且qq群里的人也不活跃,现在正在研究Freeswitch,如果能够满足,就不研究这个了,这篇文档会删除. Kama ...
- JavaScript基础精华03(String对象,Array对象,循环遍历数组,JS中的Dictionary,Array的简化声明)
String对象(*) length属性:获取字符串的字符个数.(无论中文字符还是英文字符都算1个字符.) charAt(index)方法:获取指定索引位置的字符.(索引从0开始) indexOf(‘ ...
- VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)
原文地址: VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)-软件开发-鸡啄米 http://www.jizhuomi.com/software/139.html 上一讲中鸡 ...
- ConcurrentHashMap使用示例
ConcurrentHashMap使用示例 发表于2年前(2013-07-12 19:05) 阅读(3660) | 评论(0) 25人收藏此文章, 我要收藏 赞5 如何快速提高你的薪资?-实力拍“ ...