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 ...
随机推荐
- 为什么使用Stylus
CSS预处理器的出现大大的提高了前端开发的效率和逼格,它让CSS可编程化.LESS和Sass/SCSS是两种最为常见的预处理器,拥有大量的用户基数,数目庞杂的第三方库.然而,还有一种预处理器并未引起足 ...
- 使用c++的一些建议
1: 不要使用宏,用const或enum定义常量 用inline避免函数的额外调用(使用inline的函数,块里面尽量不要使用循环和递归) 用template去荷花一些函数或者类型 用namespac ...
- 域名IP主动验证(一)
功能:主动验证给定的域名.IP对是否真正的关联 思路: 1.一开始通过修改hosts文件,把待验证的域名.IP对添加到文件里,然后用wget尝试访问,再恢复hosts文件重新验证下一对 2.后来了解到 ...
- Asp.net 字符(一)
1.字母大小写处理 private string GetChangedStr(string oldStr, strType type) { string newStr = ""; ...
- 【前端】Html5浏览器缓存 sessionStorage 与 localStorage
一.sessionStorage: 浏览关闭会话结束就被清除:(不能跨页面) localStorage:永久保存: 二.使用 var storage = window.sessionStorage; ...
- (3)《Head First HTML与CSS》学习笔记---CSS入门
1.O‘Reilly的<CSS PocketReference>是一本不错的CSS参考小书,记录了常用的元素属性. 2.元素选择器的作用强于继承的作用:用户定义强于浏览器默认(以下所有讨论 ...
- 在项目中运用精益 - Five Why
今天成功地运用了5个why对一个项目上的问题进行剖析,收获良多,在此分享给大家. 事情是这样的,该项目是个固定价格项目,处于收尾阶段,客户提出来了一些需求,我们(实施方)认为这些要求是不在最初项目范围 ...
- iOS逆向实战与工具使用(微信添加好友自动确认)
iOS逆向实战与工具使用(微信添加好友自动确认) 原文链接 源码地址 WeChatPlugin-iOS Mac OS 版微信小助手(远程控制.消息防撤回.自动回复.微信多开) 一.前言 本篇主要实现在 ...
- COGS 1570. [POJ3461]乌力波
★☆ 输入文件:oulipo.in 输出文件:oulipo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 法国作家乔治·佩雷克(Georges Perec,1 ...
- codevs 2600 13号星期几?
时间限制: 1 s 空间限制: 8000 KB 题目等级 : 黄金 Gold 题目描述 Description 从1900年1月1日(星期一) 开始经过的n年当中,每个月的13号这一天是星期一.星 ...