苗条的生成树 Slim Span--洛谷
钢哥终于没给黑题紫题了(卑微v
稍稍需要多想一点点
--------------------------------------------------------------------------------------------------------
题意简述
求所有生成树中最大边权与最小边权差最小的,输出它们的差值。
输入:
输入文件包含多组测试数据,每组测试数据如下: 第1行:2个整数n m (2 ≤ n ≤ 100 and 0 ≤ m ≤ n(n − 1)/2),n表示顶点数,m表示边数。接下来m行,每行3个空格分开的整数a b w(1 ≤ w ≤ 10000) , 表示顶点a与顶点b之间有一条边,权值为w。
输出:
对每组测试数据,如果图存在生成树,输出生成树的差值最小的;否则,输出-1。
--------------------------------------------------------------------------------------------------------
由于n的值比较小
所以可以不用那种优化到极致的神仙算法/思路(可以小小的偷偷懒
把所有边按边权排序
从每个边求最小生成树
用最小生成树中的最大边权和最小边权的差来更新最终的ans
O(q*mlogm)
--------------------------------------------------------------------------------------------------------
最后有两个0 0方便退出询问
但是...也算是个小坑吧
--------------------------------------------------------------------------------------------------------
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std; inline int read()
{
int sum = ,p = ;
char ch = getchar();
while(ch < '' || ch > '')
{
if(ch == '-')
p = -;
ch = getchar();
}
while(ch >= '' && ch <= '')
{
(sum *= ) += ch - '';
ch = getchar();
}
return sum * p;
} const int INF = ;
int n,m,ans,maxns;
struct edge
{
int frm,to,wei;
}e[];
int fa[]; bool cmp(edge a,edge b)
{
return a.wei < b.wei;
} int findfa(int o)
{
if(fa[o] == o)
return o;
else
return fa[o] = findfa(fa[o]);
} int kruskal(int o)
{
int k = ;
maxns = -;
for(int i = ;i <= n;i++)
fa[i] = i;
int minn = e[o].wei,maxn = ;
for(int i = o;i <= m;i++)
{
int a = findfa(e[i].frm);
int b = findfa(e[i].to);
if(a == b)
continue;
++k;
fa[a] = b;
maxns = max(maxns,e[i].wei);
if(k == n - )
return ;
}
return ;
} int main()
{
while(~scanf("%d%d",&n,&m))
{
if(n == && m == )
return ;
ans = INF;
memset(e,,sizeof(e));
memset(fa,,sizeof(fa));
for(int i = ;i <= m;i++)
{
e[i].frm = read();
e[i].to = read();
e[i].wei = read();
}
sort(e+,e+m+,cmp);
for(int i = ;i <= m;i++)
{
if(kruskal(i))
ans = min(ans,maxns - e[i].wei);
}
if(ans == INF)
ans = -;
printf("%d\n",ans);
}
return ;
}
苗条的生成树 Slim Span--洛谷的更多相关文章
- 洛谷 UVA1395 苗条的生成树 Slim Span
题目链接 题目描述 求所有生成树中最大边权与最小边权差最小的,输出它们的差值. 题目分析 要求所有生成树中边权极差最小值,起初令人无从下手.但既然要求所有生成树中边权极差最小值,我们自然需要对每一棵生 ...
- 洛谷 题解 UVA1395 【苗条的生成树 Slim Span】
[题意] 给出一个\(n(n<=100)\)个节点的的图,求最大边减最小边尽量小的生成树. [算法] \(Kruskal\) [分析] 首先把边按边权从小到大进行排序.对于一个连续的边集区间\( ...
- 火车运输(最大生成树+lca) 洛谷P1967
货车运输 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重. 现在有 \(q\) 辆货车 ...
- 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]中的边如果能构成一棵生成树,那么这棵树一定有最小的 ...
- UVA1395 Slim Span(kruskal)
题目:Slim Span UVA 1395 题意:给出一副无向有权图,求生成树中最小的苗条度(最大权值减最小权值),如果不能生成树,就输出-1: 思路:将所有的边按权值有小到大排序,然后枚举每一条边, ...
随机推荐
- [JZOJ4899] 雪之国度
题目描述 雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路.雪之女王赋予了每一座城市不同的能量,其中第i座城 ...
- bash数学运算之bc
一.expr 1.1 语法 注意必须有空格 只能精确到整数,无法精确到浮点数 1.2 操作符对照表 使用expr命令时需要加\进行转义,因为部分符号是保留关键字 例1:比较num1跟num2的大小 [ ...
- WDatePicker使用 出现ReferenceError: disabledDates is not defined
"ReferenceError: disabledDates is not defined at eval (eval at <anonymous> at HTMLInputEl ...
- 编码 - 设置 win10 下 cmd 编码格式
概述 cmd 编码格式修改 背景 之前尝试过修改 gitbash(mingw) 的 Character Set 这次尝试修改一下 cmd 的编码格式 准备 os win10.1903 1. 查看 当前 ...
- D0 设计模式
单一职责 一个类只负责一个功能领域中的相应职责.,就一个类而言,应该只有一个引起它变化的原因. 单一职责原则告诉我们: 一个类不能太"累"! 在软件系统中, 一个类( 大到模块, ...
- plt/sns draw histgram
当使用如下代码保存使用 plt.savefig 保存生成的图片时,结果打开生成的图片却是一片空白. import matplotlib.pyplot as pltx = np.triu(ged) # ...
- 快速搭建SSM框架环境开发项目【配置】
maven在线仓库https://mvnrepository.com/ maven构建项目 pom.xml <project xmlns="http://maven.apache.or ...
- IntelliJ IDEA快捷键设置
IntelliJ IDEA是java编程语言开发的集成环境,目前有很多用户喜欢使用IDEA进行相关开发,IDEA使用起来十分方便,本篇博客主要是介绍IDEA快捷键(Keymap)的设置和使用. I ...
- c++指针实例
#include <iostream> using namespace std; int main () { ; // 实际变量的声明 int* ip; // 指针变量的声明 ip = & ...
- python3爬取百度知道的问答并存入数据库(MySQL)
一.链接分析: 以"Linux"为搜索的关键字为例: 首页的链接为:https://zhidao.baidu.com/search?lm=0&rn=10&pn=0& ...