uva1395 - Slim Span(最小生成树)
先判断是不是连通图,不是就输出-1。
否则,把边排序,从最小的边开始枚举最小生成树里的最短边,对每个最短边用Kruskal算法找出最大边。
或者也可以不先判断连通图,而是在枚举之后如果ans还是INF,说明就没有,就输出-1.
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<cctype>
#include<sstream>
using namespace std;
#define pii pair<int,int>
#define LL long long int
const int eps=1e-;
const int INF=;
const int maxn=+;
int n,m,a,b;
int p[maxn],used[maxn];
struct Edge
{
int u,v,w;
}e[];
vector<int>vv[maxn];
bool cmp(const Edge& e1,const Edge& e2);
void ini();
int f(int x);
void dfs(int t);
int main()
{
//freopen("in10.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%d%d",&n,&m)==)
{
if(n==&&m==) break;
ini();
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&e[i].w);
e[i].u=a; e[i].v=b;
vv[a].push_back(b);
vv[b].push_back(a);
}
dfs();
bool lian=true;
for(int i=;i<=n;i++)
{
if(used[i]==)
{
lian=false;
break;
}
}
if(lian==false) puts("-1");//不是连通图,输出-1
else
{
sort(e+,e+m+,cmp);
if(m<n)
{
printf("%d\n",e[m].w-e[].w);
}
else
{
int ans=INF;
for(int i=;i<=m;i++)
{
for(int k=;k<=n;k++) p[k]=k;
int num=,ans_t;
for(int j=i;j<=m;j++)
{
int x=f(e[j].u);
int y=f(e[j].v);
if(x!=y){num++; p[x]=y; ans_t=e[j].w;}
}
if(num==n-)
{
ans=min(ans,ans_t-e[i].w);
}
}
printf("%d\n",ans);
}
}
}
//fclose(stdin);
//fclose(stdout);
return ;
}
bool cmp(const Edge& e1,const Edge& e2)
{
return e1.w<e2.w;
}
void ini()
{
for(int i=;i<=n;i++)
{
vv[i].clear();
}
memset(used,,sizeof(used));
}
int f(int x)
{
return x==p[x]?x:p[x]=f(p[x]);
}
void dfs(int t)
{
used[t]=;//记得进来以后要先标记上
int s=vv[t].size();
for(int i=;i<s;i++)
{
int q=vv[t][i];
if(used[q]==)
{
dfs(q);
}
}
}
uva1395 - Slim Span(最小生成树)的更多相关文章
- UVA1395 Slim Span(kruskal)
题目:Slim Span UVA 1395 题意:给出一副无向有权图,求生成树中最小的苗条度(最大权值减最小权值),如果不能生成树,就输出-1: 思路:将所有的边按权值有小到大排序,然后枚举每一条边, ...
- poj 3522 Slim Span (最小生成树kruskal)
http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions ...
- UVA1395 Slim Span(枚举最小生成树)
题意: 求最小生成树中,最大的边减去最小的边 最小值. 看了题解发现真简单=_= 将每条边进行从小到大排序,然后从最小到大一次枚举最小生成树,当构成生成树的时候,更新最小值 #include < ...
- POJ 3522 Slim Span 最小生成树,暴力 难度:0
kruskal思想,排序后暴力枚举从任意边开始能够组成的最小生成树 #include <cstdio> #include <algorithm> using namespace ...
- UVA 1395 Slim Span 最小生成树
题意: 给你一个图,让你求这个图中所有生成树中满足题目条件的,这个条件是生成树中最长边与最短边的差值最小. 思路: 根据最小瓶颈生成树的定义:在一个有权值的无向图中,求一个生成树最大边的权值尽量小.首 ...
- Slim Span (最小生成树)
题意 求生成树的最长边与最短边的差值的最小值 题解 最小生成树保证每一条边最小,就只要枚举最小边开始,跑最小生成树,最后一个值便是最大值 在枚举最小边同时维护差值最小,不断更新最小值. C++代码 / ...
- UVA 1395 Slim Span (最小生成树,MST,kruscal)
题意:给一个图,找一棵生成树,其满足:最大权-最小权=最小.简单图,不一定连通,权值可能全相同. 思路:点数量不大.根据kruscal每次挑选的是最小权值的边,那么苗条度一定也是最小.但是生成树有多棵 ...
- [生成树][Uva1395][Slim Span]
代码: #include <set> #include <queue> #include <cmath> #include <cstdio> #incl ...
- 【Kruskal】Slim Span
[Uva1395]Slim Span 题目略…… 试题分析:codevs1001舒适的路线上加一个判一下连通性就好,顺便把除改成减 代码: #include<iostream> #incl ...
随机推荐
- 3.1 使用STC89C52控制MC20拨打电话
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- djange数据库优化操作
一.all()命令分析 1.user_list = models.UserInfo.objects.all() #查询表一次可以得到该表的所有信息 注释:user_list.query可以查询到 ...
- LeetCode:寻找数组的中心索引【668】
LeetCode:寻找数组的中心索引[668] 题目描述 给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和 ...
- text_field text_tag 用法
= f.text_field :tax_category_id, :value => @invoice.tax_category.name, :class => "form-co ...
- 字典树 trie树 学习
一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种 二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符串连接起 ...
- Swift中字典解析后的问题,!?两种拆包的差别
给出一个json,使用SwiftyJSON解析传给model,传进去是个字典,字典里有String,NSNumber,NSDoctionary,和NSArray. 正常情况下直接使用下面的解析方法即可 ...
- P3437 [POI2006]TET-Tetris 3D
题目 P3437 [POI2006]TET-Tetris 3D 做法 一眼就是二维线段树,仔细想想,赋值操作怎么办??\(lazy\)标记放在一维,下一次又来放个标记二维就冲突了 正解:永久化标记 怎 ...
- [RK3288][Android6.0] USB OTG模式及切换【转】
本文转载自:https://blog.csdn.net/kris_fei/article/details/78620960 Platform: RK3288 OS: Android 6.0 Kerne ...
- myeclipse下搭建hadoop2.7.3开发环境
需要下载的文件:链接:http://pan.baidu.com/s/1i5yRyuh 密码:ms91 一 下载并编译 hadoop-eclipse-plugin-2.7.3.jar 二 将had ...
- Apache Phoenix的Join操作和优化
估计Phoenix中支持Joins,对很多使用Hbase的朋友来说,还是比较好的.下面我们就来演示一下. 首先看一下几张表的数据: Orders表: OrderID CustomerID ItemID ...