洛谷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算法(并查集)相关推荐

  1. HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...

  2. 最小生成树kruskal算法并查集版 C语言实现

    今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...

  3. 最小生成树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 */// 本例解决最小生成树问题 // 并查集来加快效率 // ...

  4. UVA10034 Freckles【Kruskal算法+并查集】

    In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...

  5. HDU1875 畅通工程再续【Kruskal算法+并查集】

    畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. HDU1233 还是畅通工程【Kruskal算法+并查集】

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. HDU1863 畅通工程【Kruskal算法+并查集】

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. Kruskal 算法——并查集

    需要注意的地方 :将所有的边权从小到大依次排序,按从小到大依次加入边,每次对加入的边进行如下操作: 1.找出边的两点. 2.判断两点的父亲节点是在同一个集合里. 3.如果不在同一个集合,在将两点所在的 ...

  9. poj1251 Jungle Roads Kruskal算法+并查集

    时限: 1000MS   内存限制: 10000K 提交总数: 37001   接受: 17398 描述 热带岛屿拉格里山的首长有个问题.几年前,大量的外援花在了村庄之间的额外道路上.但是丛林不断地超 ...

最新文章

  1. oracle教程之DML事务锁定的机制
  2. 使用阿里云CentOS安装LAMP时,安装PHP扩展需要注意的事情
  3. java 等待_Java并发之等待/通知机制
  4. h5适配华为手机_知道为什么建站大多选H5自适应网站吗?现在我就告诉你
  5. 微信多开txt_电脑版微信怎么双开、多开
  6. string对象和C风格字符串
  7. 今天的我叫史努比的飞鸽传书
  8. 如何卸载 Internet Explorer 7
  9. vue3 src/main.js文件配置
  10. mysql forname_关于Class.forName(“com.mysql.jdbc.Driver”)
  11. KVM详解(八)——KVM虚拟机自启动
  12. 分类信息网站模板(ICP许可证)已通过审核-两套样式模板
  13. 关于DSP2812控制W5500的程序解读
  14. idea配置阿里格式化模板+注释模板
  15. 二进制与base64
  16. JavaScript中栈内存与堆内存分别是什么?
  17. mme 服务器位置,NB-IOT的网络架构简介
  18. 满庭芳国色 高清剪图 桃红 上
  19. openlayers划线、标记点
  20. Ubuntu高效办公软件+插件

热门文章

  1. java语言中的浮点型数据分为,Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float型和double型,其中dou...
  2. c++ long 转 short_C精品编程之——C语言的数据类型、运算符、表达式,精品课程...
  3. php session缓存,扫盲:php session缓存至memcached中的方法
  4. 分子模拟软件amber_容天AMBER优化的GPU解决方案
  5. 三联竟出了这么赞的杂志!各领域佼佼者畅所欲言,为少年建立思维判断体系!
  6. 从头到尾彻底理解傅里叶变换算法(下)
  7. java合并list_怎么把两个list合并
  8. 11没有源码注释_我们为什么要看源码、应该如何看源码?
  9. mysql怎么查看索引情况_mysql 查看索引使用情况
  10. postgis数据库优化_国内首个 Serverless 数据库来了,技术架构全揭秘!