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 ...
随机推荐
- R语言中abline和lines的区别
函数lines()其作用是在已有图上加线,命令为lines(x,y),其功能相当于plot(x,y,type="1")函数abline()可以在图上加直线,其使用方法有四种格式.( ...
- 2.3 使用ARDUINO控制MC20进行GPRS的TCP通讯
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- <script>放在head内和body内有什么区别
加载的顺序不一样,你可以把HTML看成从上往下加载的. 例如在网速慢的情况下把js代码放在body底部用户会先看到网页结构,等js加载完成后才出现特效 区别简述: 在HTML body部分中的Java ...
- 【收藏】SearchCrawler By James Holmes
转自Crawling the Web with Java By James Holmes 无需任何扩展包,可直接运行. import java.awt.*; import java.awt.event ...
- jquery click()方法模拟点击事件对a标签不生效
if(e.keyCode == 13) { $items.eq(index).click(); return; } 搜索框下拉列表模拟点击时间,使用上述代码不能触发链接跳转 1,页面使用了bootst ...
- Qt构造函数的参数:QObject *parent = Q_NULLPTR
几乎所有的Qt类的构造函数都会有一个parent参数.这个参数通常是QObject* 或者是 QWidget* 类型的.很多情况下它都会有一个初始值0,因此,即便你不去给它复制也没有丝毫的问题.于是, ...
- 用PyDev、eclipse搭建Python开发环境
一 Eclipse for python环境搭建 ①下载原生Eclipse,可以直接百度Eclipse,在百度软件中心下载 ②下载完后,打开软件,选择第一个安装即可 ③安装完成后,打开eclips ...
- 多校hdu5754(博弈)
©此题中在N×M的棋盘中从(1,1)走到(N,M)B先走G后走,谁先到(N,M)谁赢,走法分为4中分别是国际象棋中的国王,车,马,王后的发,在四种走法下谁能赢: 我们依次分析每一种棋子. ①王. 首先 ...
- 机器学习-chapter1机器学习的生态系统
1.机器学习工作流程 获取->检查探索->清理准备->建模->评估->部署 2.搭建机器学习环境 1..通过安装Python,配置相关环境变量 2.强烈建议直接安装ana ...
- sql server 2005 Express 下载
简体中文版: SQL Server 2005 Express Edition 简体中文版 链接页面: http://www.microsoft.com/downloads/details.aspx?d ...