传送门

钢哥终于没给黑题紫题了(卑微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--洛谷的更多相关文章

  1. 洛谷 UVA1395 苗条的生成树 Slim Span

    题目链接 题目描述 求所有生成树中最大边权与最小边权差最小的,输出它们的差值. 题目分析 要求所有生成树中边权极差最小值,起初令人无从下手.但既然要求所有生成树中边权极差最小值,我们自然需要对每一棵生 ...

  2. 洛谷 题解 UVA1395 【苗条的生成树 Slim Span】

    [题意] 给出一个\(n(n<=100)\)个节点的的图,求最大边减最小边尽量小的生成树. [算法] \(Kruskal\) [分析] 首先把边按边权从小到大进行排序.对于一个连续的边集区间\( ...

  3. 火车运输(最大生成树+lca) 洛谷P1967

    货车运输 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重. 现在有 \(q\) 辆货车 ...

  4. POJ 3522 Slim Span 最小差值生成树

    Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...

  5. 洛谷P4234 最小差值生成树(LCT,生成树)

    洛谷题目传送门 和魔法森林有点像,都是动态维护最小生成树(可参考一下Blog的LCT总结相关部分) 至于从小到大还是从大到小当然无所谓啦,我是从小到大排序,每次枚举边,还没连通就连,已连通就替换环上最 ...

  6. 洛谷 P5540 - [BalkanOI2011] timeismoney | 最小乘积生成树(最小生成树)

    洛谷题面传送门 大概是一个比较 trivial 的小 trick?学过了就不要忘了哦( 莫名奇妙地想到了 yyq 的"hot tea 不常有,做过了就不能再错过了" 首先看到这种二 ...

  7. 最小生成树POJ3522 Slim Span[kruskal]

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7594   Accepted: 4029 Descrip ...

  8. UVALive-3887 Slim Span (kruskal)

    题目大意:定义无向图生成树的最大边与最小边的差为苗条度,找出苗条度最小的生成树的苗条度. 题目分析:先将所有边按权值从小到大排序,在连续区间[L,R]中的边如果能构成一棵生成树,那么这棵树一定有最小的 ...

  9. UVA1395 Slim Span(kruskal)

    题目:Slim Span UVA 1395 题意:给出一副无向有权图,求生成树中最小的苗条度(最大权值减最小权值),如果不能生成树,就输出-1: 思路:将所有的边按权值有小到大排序,然后枚举每一条边, ...

随机推荐

  1. HTML的学习结构

    HTML的学习结构 HTML的背景 HTML的创建 HTML的网页基本结构 HTML的基本标签 HTML的图像标签 HTML的链接标签 HTML的列表标签和表格标签 HTML的媒体元素(视频+音频) ...

  2. Element-ui组件库Table表格导出Excel表格

    安装npm install --save xlsx file-saver 两个插件的详细地址在下面 https://github.com/SheetJS/js-xlsxhttps://github.c ...

  3. python之路之socket

    一.网络编程 1.socket介绍 import socket def handle_request(client): buf = client.recv(1024) client.sendall(b ...

  4. MVC5+EF6 入门完整教程4 :EF基本的CRUD

    上篇文章主要讲了如何配置EF, 我们回顾下主要过程: 创建Data Model ---> 创建Database Context --->创建databaseInitializer---&g ...

  5. ASP.NET + MVC5 入门完整教程三 (下) ---MVC 松耦合

    建立松耦合组件 MVC 模式最重要的特性之一视他支持关注分离,希望应用程序中的组件尽可能独立,只有很少的几个可控依赖项.在理想的情况下,每个组件都不了解其他组件,而只是通过抽象接口来处理应用程序的其他 ...

  6. Java-POJ1012-Joseph

    打表啦 约瑟夫环,处理时下表统一为从0开始更方便! import java.util.Scanner; public class poj1012 { public static boolean cal ...

  7. Java-POJ1010-STAMP

    说良心话,题目不难,但是题目真的很不好懂,解读一下吧 题意: 读入分两行,第一行为邮票面额(面额相同也视为种类不同)以0结束,第二行为顾客要求的面额,以0结束 要求:每个顾客最多拿4张邮票,并求最优解 ...

  8. HTML的图像标签

    网页的图像标签 常见的图像格式 JPG GIF PNG BMP 图像标签可以带属性,格式为: <img src="path" alt="text" tit ...

  9. 浏览器的主要构成High Level Structure

    浏览器的主要组件包括: 1.     用户界面- 包括地址栏.后退/前进按钮.书签目录等,也就是你所看到的除了用来显示你所请求页面的主窗口之外的其他部分 2.     浏览器引擎- 用来查询及操作渲染 ...

  10. CSP2019第一轮游记

    Day -1 发现还有\(2\)天就初赛了\((?)\) 赶紧复习\(ing\) 然后基础知识基本上都不知道 后面的大题--全靠蒙 感觉第一轮就要\(\mathrm{AFO}\)啊\(QwQ\) Da ...