最小生成树算法Kruskal详解
要讲Kruskal,我们先来看下面一组样例。
4 5
1 2 3
1 4 5
2 4 7
2 3 6
3 4 8
14

画出来更直观一些,就是上面的这张图。
智商只要不是0的(了解最小生成树是什么的童鞋)应该都知道要选择1<->4, 1<->2, 2<->3这三条边那么大家就会问为什么选择这三条呢。
一棵树边的数量等于这棵输的点的数量减1。(不信自己画画试试)这里不再解释。
假设有N个点,那么我们肯定要选择n-1条边来生成一棵树。这棵树就是这张图的生成树。
很显然生成树有一堆。
而最小生成树是指边权之和最小的生成树。那么我们自然而然的想到了贪心!!!
没错,就是贪心,我们按照边的权值进行贪心。
同时为了保证到最后所有的点都连在了一起,并且没有多余的边。我们就要用到并查集。只要两个顶点被一条边所连接。那么他们就有一个共同的祖先。我们在以后就只要判断一下,只要两个顶点没有共同祖先,就可以将他们连入生成树中。当边的条数加到n-1时,我们就可以结束了。
下面是代码
#include <iostream>
#include <cstdio>
#include <algorithm> using namespace std; int n, m;
int f[];
int sum, tot;
struct edge{
int u, v, w;
}ed[]; bool cmp(edge a, edge b) {
return a.w < b.w;
} int find(int x) {
if(x == f[x]) return x;
else return f[x] = find(f[x]);
} int main() {
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++) {
f[i] = i;
}
for(int i=; i<=m; i++) {
scanf("%d%d%d", &ed[i].u, &ed[i].v, &ed[i].w);
}
sort(ed+, ed++m, cmp);
for(int i=; i<=m; i++) {
int xx = find(ed[i].u), yy = find(ed[i].v);
if(xx != yy) {
f[xx] = find(yy);
tot++;
sum += ed[i].w;
}
if(tot == n-) {
break;
}
}
printf("%d", sum);
}
最小生成树算法Kruskal详解的更多相关文章
- 一致性算法RAFT详解
原帖地址:http://www.solinx.co/archives/415?utm_source=tuicool&utm_medium=referral一致性算法Raft详解背景 熟悉或了解 ...
- 各大公司广泛使用的在线学习算法FTRL详解
各大公司广泛使用的在线学习算法FTRL详解 现在做在线学习和CTR常常会用到逻辑回归( Logistic Regression),而传统的批量(batch)算法无法有效地处理超大规模的数据集和在线数据 ...
- 转】Mahout推荐算法API详解
原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...
- MD5算法步骤详解
转自MD5算法步骤详解 之前要写一个MD5程序,但是从网络上看到的资料基本上一样,只是讲了一个大概.经过我自己的实践,我决定写一个心得,给需要实现MD5,但又不要求很高深的编程知识的童鞋参考.不多说了 ...
- [转]Mahout推荐算法API详解
Mahout推荐算法API详解 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeepe ...
- 2. EM算法-原理详解
1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...
- [置顶]
Isolation Forest算法实现详解
本文算法完整实现源码已开源至本人的GitHub(如果对你有帮助,请给一个 star ),参看其中的 iforest 包下的 IForest 和 ITree 两个类: https://github.co ...
- [置顶]
Isolation Forest算法原理详解
本文只介绍原论文中的 Isolation Forest 孤立点检测算法的原理,实际的代码实现详解请参照我的另一篇博客:Isolation Forest算法实现详解. 或者读者可以到我的GitHub上去 ...
- Isolation Forest算法实现详解
本文介绍的 Isolation Forest 算法原理请参看我的博客:Isolation Forest异常检测算法原理详解,本文中我们只介绍详细的代码实现过程. 1.ITree的设计与实现 首先,我们 ...
随机推荐
- LeetCode 893. Groups of Special-Equivalent Strings (特殊等价字符串组)
题目标签:String 题目可以让在 偶数位置的 chars 互换, 也可以让 在 奇数位置的 chars 互换. 所以为了 return 正确的 group 数量,需要把 那些重复的 给排除掉. 可 ...
- Linux设备驱动模型【转】
本文转载自:http://blog.csdn.net/xiahouzuoxin/article/details/8943863 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+ ...
- Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路
Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路 Doug Cutting,凭借自己对工作的热情和脚踏实地的态度,开创了Lucene和Nutch两个成功的开源搜索引擎项目 ...
- MSP430:AD10
使用的MSP430G2553,为AD10,正常有8路输出,P1.0-P1.7为A0-A7 有七个寄存器, 参考电压可以是VCC或者内部参考电压1.5V或者2.5V 参考时钟可以是内部ADC10OSC ...
- IDEA Spark Streaming 操作(套接字流)
import org.apache.spark.SparkConf import org.apache.spark.streaming.{Seconds, StreamingContext} obje ...
- PCB SQL SERVER 正则应用实例
我们用过SQL SERVER的都知道,SQL SERVER它本身是不自带正则表达式的,因为没有,所以基本都没用过啊, 但我们在C#中对文本匹配用正则的方式处理非常好用,省得你写一堆代码实现匹配,多简洁 ...
- E20170928-hm
deploy vt. (尤指军事行动) 使展开; 施展; 有效地利用;部署 bate vt. 减轻; 压制; 减去; 使软化; vi. <方> 减少; 减弱 ...
- E20170626-gg
occupy vt. 占领; 使用,住在…; 使从事,使忙碌; 任职; stack n. 垛,干草堆; (一排) 烟囱; 层积; 整个的藏书架排列;
- jquery插件开发基本步骤
一.介绍 插件编写的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护. JQuery除了提供一个简单.有效的方式进行管理元素以及脚本,它还还提供了例外一种机制:即给核心 ...
- Unity项目 - 吃豆人Pacman
项目展示 Github项目地址:Pacman 涉及知识 切片制作 Animations 状态机设置,any state切换,重写状态机 按键读取进行整数距离的刚体移动 用射线检测碰撞性 渲染顺序问题 ...