洛谷 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 ...
随机推荐
- UVA 1347"Tour"(经典DP)
传送门 参考资料: [1]:紫书 题意: 欧几里得距离???? 题解: AC代码: #include<bits/stdc++.h> using namespace std; ; int n ...
- tensorflow在文本处理中的使用——Word2Vec预测
代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)——第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-coo ...
- vue-learning:12-vue获取模板内容的方式
vue获取模板内容的方式 目录 outerHTML获取内容 template属性获取内容 ES6的字符串模板 <template>标签 <srcipt type="text ...
- http://mirror2.openwrt.org/sources/
http://mirror2.openwrt.org/sources/ Index of /sources/ ../ 1.0.4.3.arm 22-Dec-2008 20:29 93996 2.13. ...
- 【Linux】ssh-copy-id三步实现ssh免密登陆
一.本地机器上使用ssh-keygen产生公钥私钥对 ssh-keygen -t rsa -C "XXXX@163.com" --->执行完会在~/.ssh/下生成公钥私钥对 ...
- Jquery xhr2跨域
相关享目托管在github: https://github.com/devgis/CSharpCodes
- 错误 137 (net::ERR_NAME_RESOLUTION_FAILED):未知错误
上午装了一个软件(APMServ 5.2.6) 1.点击启动Apache不成功,mysql却成功了.后来知晓是80端口冲突的问题 2.当时却不知道,就鬼使神差的 点击了 边上的 解决冲突问题 ...
- LabWindows/CVI基础
1.LabWindows/CVI了解 提到NI公司,大家可能最先联想到的是NI公司推出的LabVIEW软件.LabWindows/CVI与LabVIEW相比,主要应用在各种测试.控制.故障分析及信息处 ...
- 洛谷$P4503\ [CTSC2014]$企鹅$QQ$ 哈希
正解:哈希 解题报告: 传送门$QwQ$ 直接$O(len)$枚举哪一位,然后把这一位删了重新拼接起来,存桶里查下就成 $over$? 主要的难点大概在卡哈希+卡常$QAQ$ #include< ...
- .Net Core Web Api实践之中间件的使用(一)
前言:从2019年年中入坑.net core已半年有余,总体上来说虽然感觉坑多,但是用起来还是比较香的.本来我是不怎么喜欢写这类实践分享或填坑记录的博客的,因为初步实践坑多,文章肯定也会有各种错误,跟 ...