POJ 3522 Slim Span (Kruskal枚举最小边)
题意:
求出最小生成树中最大边与最小边差距的最小值。
分析:
排序,枚举最小边, 用最小边构造最小生成树, 没法构造了就退出
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <cstring>
#include <cmath>
#include <iomanip>
#define rep(i,a,b) for(int i = a; i < b;i++)
#define _rep(i,a,b) for(int i = a; i <= b;i++)
using namespace std;
const int inf = 1e9 + ;
const int maxn = + ;
int n , m, cnt;
struct edge{
int u, to , d;
bool operator < (const edge& a) const {
return d < a.d;
}
}G[maxn * maxn];
int f[maxn];
void init(){
_rep(i,,n) f[i] = i;
}
int get(int x){
if(f[x] == x){
return x;
}else{
f[x] = get(f[x]);
return f[x];
}
}
void merge(int a, int b){
int t1 = get(a), t2 = get(b);
if(t1 != t2){
f[t2] = t1;
}
}
int Kruskal(int st){
int picked = ;
int min_d = inf, max_d = -inf;
rep(i,st,m){
int u = G[i].u, v = G[i].to, d = G[i].d;
if(get(u) != get(v)){
merge(u,v);
picked++;
min_d = min(min_d, d), max_d = max(max_d , d);
}
if(picked == n - ) return max_d - min_d;//已经构造出最小生成树, 返回结果
}
return -;//已经无法构造生成树了, 结束枚举
}
int main(){
// freopen("1.txt","r", stdin);
while(cin >> n >> m && n){
cnt = ;
rep(i,,m){
int u , v , d;
cin >> u >> v >> d;
G[cnt].u = u , G[cnt].to = v, G[cnt].d = d;
cnt++;
}
sort(G, G + cnt);
int ans = inf;
for(int i = ; i < m - n + ; i++){ //由于至少要n-1条边, 所以枚举到m - n + 1
init();
int t = Kruskal(i);
if(t != -){
ans = min(ans, t);
}else break;
}
printf("%d\n", ans == inf ? - : ans);
}
}
POJ 3522 Slim Span (Kruskal枚举最小边)的更多相关文章
- POJ 3522 - Slim Span - [kruskal求MST]
题目链接:http://poj.org/problem?id=3522 Time Limit: 5000MS Memory Limit: 65536K Description Given an und ...
- POJ 3522 Slim Span 暴力枚举 + 并查集
http://poj.org/problem?id=3522 一开始做这个题的时候,以为复杂度最多是O(m)左右,然后一直不会.最后居然用了一个近似O(m^2)的62ms过了. 一开始想到排序,然后扫 ...
- poj 3522 Slim Span (最小生成树kruskal)
http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions ...
- POJ 3522 ——Slim Span——————【最小生成树、最大边与最小边最小】
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7102 Accepted: 3761 Descrip ...
- POJ 3522 Slim Span 最小差值生成树
Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...
- POJ 3522 Slim Span(极差最小生成树)
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9546 Accepted: 5076 Descrip ...
- POJ 3522 Slim Span
题目链接http://poj.org/problem?id=3522 kruskal+并查集,注意特殊情况比如1,0 .0,1.1,1 #include<cstdio> #include& ...
- POJ 3522 Slim Span 最小生成树,暴力 难度:0
kruskal思想,排序后暴力枚举从任意边开始能够组成的最小生成树 #include <cstdio> #include <algorithm> using namespace ...
- 最小生成树POJ3522 Slim Span[kruskal]
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7594 Accepted: 4029 Descrip ...
随机推荐
- CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
关于安装请见 CDH版本大数据集群下搭建Hue(hadoop-2.6.0-cdh5.5.4.gz + hue-3.9.0-cdh5.5.4.tar.gz)(博主推荐) Hue的启动 也就是说,你Hue ...
- wordpress模板安装
wordpress的模板安装方法是: 1.把下载好的模板的目录整体复制到wordpress\wp-content\themes下面,不需要单独复制哪个文件 2.到后台的"外观"中选 ...
- 将tomcat添加到系统服务
一.安装服务 执行“service.bat install 二.卸载服务 在命令行中进入/Tomcat路径/bin/,执行“service.bat remove”
- java 反向工具类
1.ReflectUtil.java package com.example.scansell; import android.util.Log; import java.lang.reflect.C ...
- c#学习系列之关键字where
where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量. 1.接口约束. 例如,可以声明一个泛型类 MyGenericClass,这样,类型参数 T 就 ...
- (转 )Unity对Lua的编辑器拓展
转 http://blog.csdn.net/ZhangDi2017/article/details/61203505 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀 ...
- check_http.c:312: error: ‘ssl_version’
安装nagios-plugins-1.4.16,安装的过程中出现了错误,提示如下.check_http.c:312: error: ‘ssl_version’ undeclared (first us ...
- java实现汉诺塔算法
package com.ywx.count; import java.util.Scanner; /** * @author Vashon * date:20150410 * * 题目:汉诺塔算法(本 ...
- JS的本地保存localStorage、sessionStorage用法总结
localStorage 生命周期是永久的 这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在. sessionStorage 生命周期为当前窗口或标签 ...
- QT+模态对话框与非模态对话框
#include "mainwindow.h" #include <QMenuBar> #include <QMenu> #include <QAct ...