UVA 1395 MST
给你一个图,
求一个生成树, 边权Max – Min 要最小,输出最小值, 不能构成生成树的 输出 -1;
思路:
Keuksal 算法, 先排序边, 然后枚举 第一条边, 往后加入边, 直到有 n-1 条边的树, 求出那个值, 把可能的值取MIN;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int maxn = 100 + 7;
set<int> NUM;
struct Edges
{
int u, v;
int val;
bool operator < (const Edges a) const { return val < a.val; }
}E[maxn * maxn]; int Pre[maxn]; int cnt,Max,n,m;
void ADD(int u,int v,int val)
{
E[cnt].u = u, E[cnt].v = v, E[cnt].val = val;
cnt++;
} void Init()
{
for(int i = 0; i < maxn; ++i) Pre[i] = i;
} int Find(int x)
{
int r = x;
while(r != Pre[r]) r = Pre[r];
return Pre[x] = r;
} bool Union(int x,int y)
{
int ax = Find(x), ay = Find(y);
if(ax == ay) return false;
// if(ax == x || ay == y) CC--;
Pre[ax] = ay;
// CC += 2;
return true;
} bool MST (int x)
{
int num = 0;
Max = -1;
for(int i = 0; i < maxn; ++i) Pre[i] = i;
for(int i = x; i < m; ++i)
{
int a = Find(E[i].v), b = Find(E[i].u);
if(a == b) continue;
Pre[a] = b;
Max = max(Max,E[i].val);
if(++num == n-1) return true;
}
return false;
}
int main()
{
while(~scanf("%d%d",&n,&m) && (n + m))
{
cnt = 0;
int a, b, c;
for(int i = 0; i < m; ++i)
{
scanf("%d%d%d",&a,&b,&c);
ADD(a,b,c);
}
int ans = 999999999;
sort(E,E+m);
for(int i = 0; i < m; ++i)
{
if(MST(i))
{
ans = min(ans, Max - E[i].val);
}
}
if(ans == 999999999) ans = -1;
printf("%d\n",ans);
}
return 0;
}
UVA 1395 MST的更多相关文章
- UVA 1395 Slim Span (最小生成树,MST,kruscal)
题意:给一个图,找一棵生成树,其满足:最大权-最小权=最小.简单图,不一定连通,权值可能全相同. 思路:点数量不大.根据kruscal每次挑选的是最小权值的边,那么苗条度一定也是最小.但是生成树有多棵 ...
- UVa 1395 - Slim Span(最小生成树变形)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 1395 Slim Span 最小生成树
题意: 给你一个图,让你求这个图中所有生成树中满足题目条件的,这个条件是生成树中最长边与最短边的差值最小. 思路: 根据最小瓶颈生成树的定义:在一个有权值的无向图中,求一个生成树最大边的权值尽量小.首 ...
- UVA 1395 (kruskal)
/* 最大路与最小路的问题: 这道题看似简单,但是若不知道思路将无法写出. 思路:最小生成树很容易求出,但是最大值与最小值只差很难保证是最小的, 比如:1 5 5 6 100 101 很明显101 - ...
- UVA 1395 苗条的生成树(最小生成树+并查集)
苗条的生成树 紫书P358 这题最后坑了我20分钟,怎么想都对了啊,为什么就wa了呢,最后才发现,是并查集的编号搞错了. 题目编号从1开始,我并查集编号从0开始 = = 图论这种题真的要记住啊!!题目 ...
- Poj(3522),UVa(1395),枚举生成树
题目链接:http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submis ...
- UVa 1395 Slim Span【最小生成树】
题意:给出n个节点的图,求最大边减最小边尽量小的值的生成树 首先将边排序,然后枚举边的区间,判定在该区间内是否n个点连通,如果已经连通了,则构成一颗生成树, 则此时的苗条度是这个区间内最小的(和kru ...
- UVa 1395 (最小生成树) Slim Span
题意: 规定一棵生成树的苗条度为:最大权值与最小权值之差.给出一个n个顶点m条边的图,求苗条度最小的生成树. 分析: 按照边的权值排序,枚举边集的连续区间[L, R]的左边界L,如果这些区间刚好满足一 ...
- 【UVA 1395】 Slim Span (苗条树)
[题意] 求一颗生成树,满足最大边和最小边之差最小 InputThe input consists of multiple datasets, followed by a line containin ...
随机推荐
- T-SQL 编程技巧
Ø T-SQL 编程是大多数程序员都会接触的,也是数据库编程必须掌握的技术.下面,是本人在工作或学习中积累的一些心得和技巧.主要包含以下内容: 1. waitfor延时执行 2. NOT 关 ...
- python S2-45 漏洞利用工具
初学python脚本,写个工具练练手.第一次写勿喷.呃...忘了截图了,补上了. 程序对于处理 JSON post 有些问题,其他地方还没发现有啥问题. #coding:utf-8 import ch ...
- Java之@SuppressWarnings
用了这个,MyEclipse里就不会报那些警告了,看起来漂亮多了 常用的:@SuppressWarnings("unchecked"),泛型@SuppressWarnings(&q ...
- 3年java工作经验必备技能
3年工作经验的Java程序员应该具备的技能 一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.反射中,Class.forName和clas ...
- jQuery(二)button事件改变标签值
button事件改变标签值 例子一: <html> <head> <script type="text/javascript" src="/ ...
- Linux 脚本/脚本实现思路
- linux 权限管理
- vue2.0安装
vue2.0环境安装 参考网站http://www.open-open.com/lib/view/open1476240930270.html (以上博客vue init webpack-simple ...
- Microsoft SQL - 数据库管理系统
数据库管理系统(Server Management Studio) SQL Server Management Studio是一个数据库管理系统软件,数据库可以看成是一个个存储数据的文件,而Manag ...
- 解决Ubuntu 18.04中文输入法的问题,安装搜狗拼音
首先安装fcitx一.检测是否安装fcitx首先检测是否有fcitx,因为搜狗拼音依赖fcitx> fcitx提示:程序“fcitx”尚未安装. 您可以使用以下命令安装:> sudo ap ...