按照权值排序可得,就有如下顺序:

1. 1-2 1

2. 1-4 2

3. 1-5 2

4. 2-5 3

5. 2-3 4

6. 4-5 4

每次选取最小边泉,判断是否同属一个集合,如果不属于同一集合,就把它加到左端点集合中,也就是说,两个点不属于一个集合说明这条边不在树中,即可将其加入左端点集合。

下面我们模拟算法过程:

每次,直接把每次找到的边找到,就可以了!

对于Kruscal它更适合于稀疏图,借助贪心与并查集实现,我们看懂了上述算法实现过程,很容易写出算法!

代码实现

#include<iostream>
#include<queue>
#include<algorithm>
#include<set>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<bitset>
#include<cstdio>
#include<cstring>
//---------------------------------Sexy operation--------------------------//#define cini(n) scanf("%d",&n)
#define cinl(n) scanf("%lld",&n)
#define cinc(n) scanf("%c",&n)
#define cins(s) scanf("%s",s)
#define coui(n) printf("%d",n)
#define couc(n) printf("%c",n)
#define coul(n) printf("%lld",n)
#define debug(n) printf("%d_________________________________\n",n);
#define speed ios_base::sync_with_stdio(0)
#define file  freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
//-------------------------------Actual option------------------------------//
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define Swap(a,b) a^=b^=a^=b
#define Max(a,b) (a>b?a:b)
#define Min(a,b) a<b?a:b
#define mem(n,x) memset(n,x,sizeof(n))
#define mp(a,b) make_pair(a,b)
#define pb(n)  push_back(n)
#define dis(a,b,c,d) ((double)sqrt((a-c)*(a-c)+(b-d)*(b-d)))
//--------------------------------constant----------------------------------//#define INF  0x3f3f3f3f
#define esp  1e-9
#define PI   acos(-1)
using namespace std;
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef  long long ll;
//___________________________Dividing Line__________________________________/int n,m;
int father[1100000];
struct node
{int x;int y;int k;
}Q[1100000];
int find(int x)
{if(father[x]==x)return x;return father[x]=find(father[x]);
}
bool cmp(node a,node b)
{return a.k<b.k;
}
int main()
{while(~scanf("%d %d",&n,&m)){int cont=0,sum=0,st=0;for(int i=0;i<m;i++){scanf("%d %d %d",&Q[i].x,&Q[i].y,&Q[i].k);cont+=Q[i].k;}sort(Q,Q+m,cmp);for(int i=1;i<=n;i++) father[i]=i;for(int i=0;i<m;i++){int tx=find(Q[i].x);int ty=find(Q[i].y);if(tx!=ty){sum+=Q[i].k;st++;father[tx]=ty;if(st==n-1)break;}}printf("%d\n",sum);}return 0;
}

疯子的算法总结10--最小生成树Kruscal相关推荐

  1. 【算法学习】最小生成树

    最小生成树 最小生成树的算法包括Prim算法和Kruskal算法. 在用Kruscal算法的时候会用到并查集. 完整代码可直接翻到最后~ 首先咱们先介绍比较容易理解也是最先会想到的一个算法,Prim算 ...

  2. 2021首期Nature封面:牛津大学ML算法实现10万高压非晶硅原子的模拟​ | AI日报

    2021首期Nature封面:牛津大学ML算法实现10万高压非晶硅原子的模拟 为了对一般无序结构材料有更深的理解,人们广泛研究了非晶硅在高压条件下的富相行为.然而在和原子打交道的层面上,人们一直需要借 ...

  3. 基于蚁群算法的10个城市TSP问题的最短路径研究(附源码及讲解步骤)

    基于蚁群算法的10个城市TSP问题的最短路径研究 欢迎关注:天际使徒的个人博客 1 蚁群算法 1.1 蚁群算法的流程步骤 这里以TSP问题为例,算法设计的流程如下: 步骤1:对相关参数进行初始化,包括 ...

  4. 银行卡号校验位的LUHN算法模10“隔位2倍加”校验数的公式

    银联卡卡号由三部分组成:发卡机构标识码(bin).发卡机构自定义位.校验码.其中,卡号左起前六位是发卡机构标识代码(BIN),由6位数字组成.BIN号由中国银联复制分配.确认和管理:卡号第七位起事发卡 ...

  5. 算法6.10 迪杰斯特拉算法

    算法6.10 迪杰斯特拉算法 代码实现 //算法6.10 迪杰斯特拉算法 #pragma once #include <iostream>using namespace std;//图的邻 ...

  6. c语言:利用冒泡算法对10个数字进行从小到大的排序

    利用冒泡算法对10个数字进行从小到大的排序 #include <stdio.h> int main() {int a[10];int i,j,t;printf("请输入10个数字 ...

  7. 算法导论-上课笔记10:最小生成树

    文章目录 0 前言 1 最小生成树 2 Kruskal算法 3 Prim算法 0 前言 在电路设计中,常常需要将多个组件的针脚连接在一起.要连接n个针脚,可以使用n-1根连线,每根连线连接两个针脚,则 ...

  8. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

  9. Prim算法 求出 最小生成树

    MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一 ...

最新文章

  1. 巴克码相关器的verilog HDL设计
  2. 排序只显示前5_Linux 文件大小统计与排序 du,df 和 sort!
  3. HDU 1875 畅通工程再续 (最小生成树)
  4. 基于可靠消息方案的分布式事务:Lottor介绍
  5. CRM呼叫中心和社交媒体集成的UI错误信息显示机制
  6. 微信OAuth2.0网页授权设置一个域名需多个域名使用的问题
  7. linux初始化内存盘卡住,Linux系统内存磁盘初始化技术详细解析
  8. python访问多个网页_如何使用python请求登录具有多个页面的CAS?
  9. 峰Redis学习(6)Redis 数据结构(sorted-set的操作)
  10. Java基础Lambda表达式【四】
  11. 微信小程序图片无法显示时显示默认图片
  12. 用户空间和内核空间的区别
  13. 约束布局ConstraintLayout ,报错:This view is not constrained vertically
  14. 每个故事是一座布满灰尘的城墙
  15. 大一新生计算机强化训练小结,大一新生军训个人小结
  16. [转载]关于如何选择5D2和6D的忠告_我是亲民_新浪博客
  17. 一阶贝塞尔函数matlab,一阶贝塞尔函数
  18. Charles安装及使用教程
  19. 自学Java如何正确入门?
  20. java中的匿名内部类总结

热门文章

  1. APNS提供了两项基本的服务:消息推送和反馈服务
  2. Linux/Centos Tomcat 配置日志切分以及脚本自动清理
  3. 安装配置好openstack环境的虚拟机,须要改动ip时,在数据库中同步改动ip的方法...
  4. 百度笔试题,malloc/free与new/delete的区别与联系
  5. 【转】回调函数,函数指针与函数对象
  6. 发放MindMeister内测邀请,仅20
  7. long logn的大小c语言,基本排序(C语言版) - ________MX的个人页面 - OSCHINA - 中文开源技术交流社区...
  8. eclipse maven Invalid classpath publish/export dependency
  9. linux lspci信息 详解_Linux引导之EFI SHELL详解
  10. yum错误---Running Transaction