洛谷 UVA1395 苗条的生成树 Slim Span
题目链接
题目描述
求所有生成树中最大边权与最小边权差最小的,输出它们的差值。
题目分析
要求所有生成树中边权极差最小值,起初令人无从下手。但既然要求所有生成树中边权极差最小值,我们自然需要对每一棵生成树都进行考虑,而我们又显然不可能枚举所有生成树,那么首先要解决的就是求在某一条件下某一棵生成树上的边权极差最小值。
我们试着把这个条件具体化,比如说固定一条边,为了方便,我们假定这条边是树中的最小边,也就是要在拥有同样的最小边的生成树中求边权极差最小值。这个问题很好解决。这些生成树中,因为最小的边固定,那么我们尽量让最大边最小,就能够使得边权的极差最小。而要让最大边最小的生成树,其实也就是以我们固定的这条边为最小边的最小生成树。
于是这道题的解法就清楚了——枚举每一条边,求以它为最小边的最小生成树的边权极差,并从中求取最小值。需要注意的是,并非以每一条边为最小边都能够构建一棵最小生成树,因此我们需要判断是否形成了树,如果是再进行比较。
代码
#include<algorithm>
#include<cstdio>
using namespace std;
struct edge
{
int u,v,w;
friend bool operator <(const edge &t1,const edge &t2)
{
return t1.w<t2.w;
}
}a[];
int n,m,minn,total,father[],tree[];
bool vis[],check;
int find(int x)
{
if(father[x]!=x)
father[x]=find(father[x]);
return father[x];
}
void merge(int x,int y)
{
x=find(x);
y=find(y);
father[x]=y;
return;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
if(!n&&!m)
break;
check=false;
minn=0x7fffffff;
for(int i=;i<=m;++i)
scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);
sort(a+,a+m+);
for(int k=;k<=m;++k)
{
total=;
for(int i=;i<=m;++i)
father[i]=i;
for(int i=k;i<=m;++i)
{
if(find(a[i].u)!=find(a[i].v))
{
tree[++total]=i;
merge(a[i].u,a[i].v);
if(total==n-)
break;
}
}
if(total==n-)
{
check=true;
minn=min(a[tree[total]].w-a[tree[]].w,minn);
}
}
if(!check)
puts("-1");
else
printf("%d\n",minn);
}
return ;
}
Slim Span
洛谷 UVA1395 苗条的生成树 Slim Span的更多相关文章
- 洛谷 题解 UVA1395 【苗条的生成树 Slim Span】
[题意] 给出一个\(n(n<=100)\)个节点的的图,求最大边减最小边尽量小的生成树. [算法] \(Kruskal\) [分析] 首先把边按边权从小到大进行排序.对于一个连续的边集区间\( ...
- 苗条的生成树 Slim Span--洛谷
传送门 钢哥终于没给黑题紫题了(卑微v 稍稍需要多想一点点 ---------------------------------------------------------------------- ...
- UVA1395 Slim Span(kruskal)
题目:Slim Span UVA 1395 题意:给出一副无向有权图,求生成树中最小的苗条度(最大权值减最小权值),如果不能生成树,就输出-1: 思路:将所有的边按权值有小到大排序,然后枚举每一条边, ...
- POJ 3522 Slim Span 最小差值生成树
Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...
- 洛谷P4234 最小差值生成树(LCT,生成树)
洛谷题目传送门 和魔法森林有点像,都是动态维护最小生成树(可参考一下Blog的LCT总结相关部分) 至于从小到大还是从大到小当然无所谓啦,我是从小到大排序,每次枚举边,还没连通就连,已连通就替换环上最 ...
- 洛谷 P5540 - [BalkanOI2011] timeismoney | 最小乘积生成树(最小生成树)
洛谷题面传送门 大概是一个比较 trivial 的小 trick?学过了就不要忘了哦( 莫名奇妙地想到了 yyq 的"hot tea 不常有,做过了就不能再错过了" 首先看到这种二 ...
- 最小生成树POJ3522 Slim Span[kruskal]
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7594 Accepted: 4029 Descrip ...
- UVALive-3887 Slim Span (kruskal)
题目大意:定义无向图生成树的最大边与最小边的差为苗条度,找出苗条度最小的生成树的苗条度. 题目分析:先将所有边按权值从小到大排序,在连续区间[L,R]中的边如果能构成一棵生成树,那么这棵树一定有最小的 ...
- poj 3522 Slim Span (最小生成树kruskal)
http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions ...
随机推荐
- mysql导出csv/sql/newTable/txt的方法,mysql的导入txt/sql方法...mysql备份恢复mysqlhotcopy、二进制日志binlog、直接备份文件、备份策略、灾难恢复.....................................................
mysql备份表结构和数据 方法一. Create table new_table_nam备份到新表:MYSQL不支持: Select * Into new_table_name from old_t ...
- 2019-9-3-win10-uwp-收集-DUMP-文件
title author date CreateTime categories win10 uwp 收集 DUMP 文件 lindexi 2019-09-03 17:48:44 +0800 2018- ...
- linux 操作 I/O 端口
在驱动硬件请求了在它的活动中需要使用的 I/O 端口范围之后, 它必须读且/或写到这些 端口. 为此, 大部分硬件区别 8-位, 16-位, 和 32-位端口. 常常你无法混合它们, 象你 正常使 ...
- docker运行容器后agetty进程cpu占用率100%
1.最近在使用docker容器的时候,发现宿主机的agetty进程cpu占用率达到100% 在Google上搜了下,引起这个问题的原因是在使用"docker run"运行容器时使用 ...
- 百度人脸识别集成错误:Build command failed. Error while executing process F:\dev\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments
大概是这么个错误 Build command failed. Error while executing process F:\dev\Android\Sdk\cmake\3.6.4111459\bi ...
- Team Foundation Server 2015使用教程【4】:默认团队权限说明
- C++Review3_关于C++各种概念的串联与梳理
经过前面两个Review,对代码复用,类的继承概念有了进一步理解. 这里再做一次复盘,把其他概念也串联起来构成一个知识框架. 首先是类和对象的概念.对象指的是特征与技能的结合体,面向对象编程思想的好处 ...
- lumen简单使用exel组件
1.首先打开命令行,进入到lumen项目的根目录中,然后用composer下载excel组件 composer require maatwebsite/excel ~2.1.0 2.安装成功后,在bo ...
- TCPIP四层模型和OSI七层模型对应表
- 大数据基石——Hadoop与MapReduce
本文始发于个人公众号:TechFlow 近两年AI成了最火热领域的代名词,各大高校纷纷推出了人工智能专业.但其实,人工智能也好,还是前两年的深度学习或者是机器学习也罢,都离不开底层的数据支持.对于动辄 ...