洛谷 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 ...
随机推荐
- linux 基于 jiffy 的超时
到目前为止所展示的次优化的延时循环通过查看 jiffy 计数器而不告诉任何人来工作. 但是最好的实现一个延时的方法, 如你可能猜想的, 常常是请求内核为你做. 有 2 种方 法来建立一个基于 jiff ...
- linux 存取 I/O 内存
在一些平台上, 你可能逃过作为一个指针使用 ioremap 的返回值的惩罚. 这样的使用不 是可移植的, 并且, 更加地, 内核开发者已经努力来消除任何这样的使用. 使用 I/O 内 存的正确方式是通 ...
- 牛客多校第四场sequence C (线段树+单调栈)
牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...
- 第三阶段:3.Web端产品设计:5.产品设计-视觉设计
视觉设计主要在表现层. 色彩心理产品经理可以也是应当掌握的.什么颜色的选择都是有理有据的. 信息清晰度. 比如这个图:当用户操作出问题,谷歌会给出问题同时给出解决方法. 视觉动物. 2/8分布原则.用 ...
- pyspider 安装使用过程的一些坑
1.没有正确安装对应版本的pycurl 原因分析: PyCurl 安装错误,需要安装 PyCurl 库(PyCurl 是一个Python接口,是多协议文件传输库的 libcurl.类似于urllib ...
- DEVOPS技术实践_10:安装部署Artifactory
需要一种机制去存储所有的二进制代码(build,packages,third-party plugins等)到类似于版本控制系统的系统. 像Git,SVN存储代码,它们存储的往往是源代码,不是二进制文 ...
- mysql主从之binlog的工作模式
一 三种模式介绍 1.1 查看mysql主库的binlog格式 binlog仅在主库设置即可,从库无需设置 binlog的默认方式为STATEMENT ( show variables like '% ...
- FPGA之IO信号类型深入理解
在FPGA设计开发中,很多场合会遇到同一根信号既可以是输入信号,又可以是输出信号,即IO类型(Verilog定义成inout). 对于inout型的信号,我们既可以使用FPGA原语来实现,也可以使用V ...
- 20行Python代码爬取王者荣耀全英雄皮肤
引言王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成. 准备工作 ...
- A记录都不懂,怎么做开发Leader?
开发 Leader 和一线开发的区别在于:普通一线开发很多时候都只接触业务编码,不需要关注除开发之外的其他事情.但是作为一个开发 Leader,不仅仅需要懂开发层面的东西,还需要懂得运维层面的东西. ...