最小生成树KrusKal算法(并查集)
洛谷p1111链接
克鲁斯卡尔算法的思路就是由森林变成树的过程,其中最主要的就是贪心和并查集的应用。
我们知道链接n个点需要n-1条边,这就满足的最后生成的是一颗树,而不是一个环。在这n-1条边的选择上我们又要尽可能的让边的权重小,于是我们不难想到先对边的权重进行升序排序。然后再去判断这条边的两个点在不在一颗树上,如果不在就连接这两颗树。 如果在就舍弃这条边继续找下一条边,当联通的边等于n-1时,这就是我呢最终得到的最小生成树。也就是我们最后的答案。
下面时最后的代码,
#include<bits/stdc++.h>
using namespace std;
struct road {int begin,end,value;
}a[100010];
int n,m,f[1010];
bool cmp(road x,road y) {return x.value < y.value;
}
void init() {for(int i = 1; i <= n; i++)f[i] = i;
}
int find(int x) {//查找根节点,这里不用递归,防止递归深度过深,超时, int fx = x;while(fx != f[fx])fx = f[fx];while(f[x] != fx) {x = f[x];f[x] = fx;}
}
int main() {cin >> n >> m;for(int i = 0; i < m; i++)cin >> a[i].begin >> a[i].end >> a[i].value;init();//初始化并查集的根结点。 sort(a,a + m,cmp);//排序,让value权重最小的有限在前。int maxn = 0,sum = 0;//设置最大的权重的为0,方便后面比对 ,同时当前变数设置为0, for(int i = 0; i < m; i++) {int fbegin = find(a[i].begin);int fend = find(a[i].end);if(fbegin != fend) {f[fend] = fbegin;//连接两颗树,sum++;//边的树加一。maxn = max(maxn, a[i].value);//找到在这棵树上的最大权重边。 }if(sum == n - 1)//森林变成树,提前break; break;}cout << maxn <<endl;return 0;
}
最小生成树KrusKal算法(并查集)相关推荐
- HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...
- 最小生成树kruskal算法并查集版 C语言实现
今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...
- 最小生成树Kruskal算法+并查集检查连通
/* 10 6 1 2 6 1 3 1 1 4 5 2 3 5 2 5 3 3 4 5 3 5 6 3 6 4 4 6 2 5 6 6 */// 本例解决最小生成树问题 // 并查集来加快效率 // ...
- UVA10034 Freckles【Kruskal算法+并查集】
In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...
- HDU1875 畅通工程再续【Kruskal算法+并查集】
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU1233 还是畅通工程【Kruskal算法+并查集】
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU1863 畅通工程【Kruskal算法+并查集】
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Kruskal 算法——并查集
需要注意的地方 :将所有的边权从小到大依次排序,按从小到大依次加入边,每次对加入的边进行如下操作: 1.找出边的两点. 2.判断两点的父亲节点是在同一个集合里. 3.如果不在同一个集合,在将两点所在的 ...
- poj1251 Jungle Roads Kruskal算法+并查集
时限: 1000MS 内存限制: 10000K 提交总数: 37001 接受: 17398 描述 热带岛屿拉格里山的首长有个问题.几年前,大量的外援花在了村庄之间的额外道路上.但是丛林不断地超 ...
最新文章
- oracle教程之DML事务锁定的机制
- 使用阿里云CentOS安装LAMP时,安装PHP扩展需要注意的事情
- java 等待_Java并发之等待/通知机制
- h5适配华为手机_知道为什么建站大多选H5自适应网站吗?现在我就告诉你
- 微信多开txt_电脑版微信怎么双开、多开
- string对象和C风格字符串
- 今天的我叫史努比的飞鸽传书
- 如何卸载 Internet Explorer 7
- vue3 src/main.js文件配置
- mysql forname_关于Class.forName(“com.mysql.jdbc.Driver”)
- KVM详解(八)——KVM虚拟机自启动
- 分类信息网站模板(ICP许可证)已通过审核-两套样式模板
- 关于DSP2812控制W5500的程序解读
- idea配置阿里格式化模板+注释模板
- 二进制与base64
- JavaScript中栈内存与堆内存分别是什么?
- mme 服务器位置,NB-IOT的网络架构简介
- 满庭芳国色 高清剪图 桃红 上
- openlayers划线、标记点
- Ubuntu高效办公软件+插件
热门文章
- java语言中的浮点型数据分为,Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float型和double型,其中dou...
- c++ long 转 short_C精品编程之——C语言的数据类型、运算符、表达式,精品课程...
- php session缓存,扫盲:php session缓存至memcached中的方法
- 分子模拟软件amber_容天AMBER优化的GPU解决方案
- 三联竟出了这么赞的杂志!各领域佼佼者畅所欲言,为少年建立思维判断体系!
- 从头到尾彻底理解傅里叶变换算法(下)
- java合并list_怎么把两个list合并
- 11没有源码注释_我们为什么要看源码、应该如何看源码?
- mysql怎么查看索引情况_mysql 查看索引使用情况
- postgis数据库优化_国内首个 Serverless 数据库来了,技术架构全揭秘!