题意

求生成树的最长边与最短边的差值的最小值

题解

最小生成树保证每一条边最小,就只要枚举最小边开始,跑最小生成树,最后一个值便是最大值

在枚举最小边同时维护差值最小,不断更新最小值。

C++代码

/**
/*@author Victor
/*language C++
*/
#include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<deque>
#include<stack>
#include<cmath>
#include<list>
#include<map>
#include<set>
//#define DEBUG
#define RI register int
using namespace std;
typedef long long ll;
//typedef __int128 lll;
const int N=+;
const int MOD=1e9+;
const double PI = acos(-1.0);
const double EXP = 1E-;
const int INF = 0x3f3f3f3f;
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pil pair<int , ll>
#define pli pair<ll,int>
#define pdl pair<double,ll>
#define pld pair<ll,double>
#define pdd pair<double,double>
#define iput(n) scanf("%d",&n);
#define dput(n) scanf("%lf",&n);
#define llput(n) scanf("%lld",&n);
#define cput(n) scanf("%s",n);
#define puti(n) printf("%d\n",n);
#define putll(n) printf("%lld\n",n);
#define putd(n) printf("%lfd\n",n);
#define _cls(n) memset(n,0,sizeof(n));
//求二进制中1的个数
//__builtin_popcount(n);
//求2^k
//#define (ll)Pow(2,k) (1LL<<k) struct edge
{
int u,v,cost;
}eg[];
int n,m;//,father[100001]; bool cmp(edge e1,edge e2)
{
return e1.cost<e2.cost;
} int par[N]; //父亲
int Rank[N]; //树的高度 //初始化n个元素
void init(int n)
{
for(int i=; i<=n; ++i)
{
par[i] = i;
Rank[i] = ;
}
}
//查询树的根非递归实现
int find(int x)
{
while(par[x]!=x)
x=par[x];
return x;
}
//合并x和y所属集合
void unite(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
return;
if(Rank[fx]>Rank[fy])
par[fx]=fy;
else
{
par[fy]=fx;
if(Rank[fx]==Rank[fy])
Rank[x]++;
}
}
//关于路径压缩
int find2(int x)
{
int fx=find(x);
int t;
while(x!=fx)
{
t=par[x];
par[x]=fx;
x=t;
}
return fx;
} // 最小生成树 Kruskal 算法
int minn;
int Kruskal()
{
minn = 1e9;
edge e;
int i,res;
sort(eg,eg+m,cmp);
// 构建最小生成树
for(int j = ;j < m; j ++){ init(n);res=; for( i=j;i<m;++i )
{
e=eg[i];
if( find(e.u)!=find(e.v) )
{
unite(e.u,e.v); if(++res == n - )
minn = min(minn,e.cost - eg[j].cost);
}
}
}
return res;
} int main(){ while(scanf("%d%d",&n,&m)&&n+m){ for(int i = ; i < m;++i){
scanf("%d%d%d",&eg[i].u,&eg[i].v,&eg[i].cost);
}
int ans = Kruskal();
bool flag = ; if(minn != ) printf("%d\n",minn);
else printf("-1\n");
}
}

Slim Span (最小生成树)的更多相关文章

  1. poj 3522 Slim Span (最小生成树kruskal)

    http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions ...

  2. POJ 3522 Slim Span 最小生成树,暴力 难度:0

    kruskal思想,排序后暴力枚举从任意边开始能够组成的最小生成树 #include <cstdio> #include <algorithm> using namespace ...

  3. uva1395 - Slim Span(最小生成树)

    先判断是不是连通图,不是就输出-1. 否则,把边排序,从最小的边开始枚举最小生成树里的最短边,对每个最短边用Kruskal算法找出最大边. 或者也可以不先判断连通图,而是在枚举之后如果ans还是INF ...

  4. UVA 1395 Slim Span 最小生成树

    题意: 给你一个图,让你求这个图中所有生成树中满足题目条件的,这个条件是生成树中最长边与最短边的差值最小. 思路: 根据最小瓶颈生成树的定义:在一个有权值的无向图中,求一个生成树最大边的权值尽量小.首 ...

  5. UVA 1395 Slim Span (最小生成树,MST,kruscal)

    题意:给一个图,找一棵生成树,其满足:最大权-最小权=最小.简单图,不一定连通,权值可能全相同. 思路:点数量不大.根据kruscal每次挑选的是最小权值的边,那么苗条度一定也是最小.但是生成树有多棵 ...

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

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

  7. POJ 3522 Slim Span(极差最小生成树)

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9546   Accepted: 5076 Descrip ...

  8. POJ 3522 ——Slim Span——————【最小生成树、最大边与最小边最小】

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7102   Accepted: 3761 Descrip ...

  9. POJ-3522 Slim Span(最小生成树)

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8633   Accepted: 4608 Descrip ...

随机推荐

  1. [luogu]P1514 引水入城[搜索][记忆化][DP]

    [luogu]P1514 引水入城 引水入城 题目描述在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形 ,如下图所示,其中每个格 ...

  2. CQOI2010 传送带

    题目链接:戳我 分别枚举线段AB上的出发点,和线段CD上的到达点,然后时间直接计算,取min就可以了. 但是这样子显然会T飞,(相当于1e5的平方吧?)所以我们进一步考虑性质. 然后打表(或者感性理解 ...

  3. zookeeper3.5.5集群部署

    ZooKeeper是一个为分布式应用所设计的分布的.开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务.ZooKeeper ...

  4. vue 使用 vue-awesome-swiper (基础版)

    1.0 安装 vue-awesome-swiper(稳定版本 2.6.7) npm install vue-awesome-swiper@2.6.7 --save 2.0 引入配置(全局使用) 2.1 ...

  5. mac 的 quickTime Player 设置播放速度

    按住 option 点击 下一个视频的图标每次调整幅度为0.1,大于 1.9 声音会消失. 按住 option+J 调慢播放速度 option+L 调快播放速度 每次调整幅度为0.1

  6. Linux安装配置redis 、启动redis、redis设置密码

    由于间隔时间较长.机器的环境不同等等原因,所以每次安装redis的时候总是不那么顺利,所以这次我要做个笔记 文章大部分内容源于https://blog.csdn.net/gisredevelopmen ...

  7. 不属于java语言鲁棒性特点的是

      A:java能检查程序在编译和运行时的错误 B:java能运行虚拟机实现跨平台 C:java自己操纵内存减少了内存出错的可能性 D:java还实现了真数组,避免了覆盖数据的可能 鲁棒性(Robus ...

  8. android实现异步加载图片类

    其中牵涉到的关键知识点 1,回调机制,不过回调接口的实现方式有多种多样,可以是一个类继承该接口,也可以是作为一个方法参数: 可以参照自己的这篇博客: http://www.cnblogs.com/bo ...

  9. 【2019个推开发者节】亿级日活APP都在用的个推SDK, 现在全部免费!

    1024程序员节来了 双11近了 各路满减.折扣.领券.秒杀.集赞 营销玩法猛于虎,一看优惠两毛五 日常拼命赶"需求" 修"Bug"的开发者们 想找个好用又不贵 ...

  10. SOUI3.0仿Android插值动画使用方法

    在Android系统中,有插值动画,数值动画,属性动画,帧动画. 帧动画,在SOUI里可以通过AnimateImg这个控件来实现,其它几种动画3.0之前不支持,需要类似动画效果,只能自己通过定时器去实 ...