首页 > 其他分享 >最小生成树学习笔记

最小生成树学习笔记

时间:2023-04-16 11:44:46浏览次数:49  
标签:int 边权 最小 笔记 生成 算法 sb

定义

最小生成树是指给定一个带权连通图 G,如果里面有一个子图 G' 中的边权和加起来最小并且使得所有的点都能两两相通。

性质

从上述的定义可以看出,最小生成树有以下性质:

  1. 如果图 G 中有 n 个点的话,G'中的边数为 n-1 且 G' 中不含有环。

  2. 最小生成树可能是一个,也可能是多个。

还有一些复杂的性质感兴趣的可以自行百度。

kruskal 算法

前置知识:并查集。

kruskal 算法的基本思想就是贪心,该算法的流程也很简单。

首先我们需要将所有的边进行排序,然后枚举每一条边,如果当前的边链接的两个点早已经间接或直接相连,我们就直接跳过,不连这条边,如果连满了 n-1 条边就直接退出循环,然后我们所选的边就构成了一棵最小生成树。

在判断当前边的两点是否已经相连的办法可以用并查集来判断,也是比较方便的做法。

根据其定义可以想到,我们要贪心的话,就得先加入边权小的边,假设只有两个点,那他的最小生成树就是两点之间边权最小的边构成,当到了三个点之后,就是从前面已经链接的所有边中覆盖的点与第三个点相连的边中挑一条边权最小的边来连,因为如果要是想要把第三个点连进去,就必须要与之前的联通图中的任意一点连一条边,经过这样不断的扩大,最终会以最小的代价连进所有点。在算法流程中,其当前连接的边是必定有一个点是在联通图中,必有一个点未连进联通图中,而当前边又是剩下的边中边权最小的,所以一定是原图中一棵最小生成树的边。

以上不理解也没关系反正是我胡扯的背板子就好了

P3366 【模板】最小生成树

code:

#include<bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
int n,m,f[N],num,ans;
struct sb{int x,y,w;}e[N];
inline int cmp(sb a,sb b){return a.w<b.w;}
inline int fid(int x){if(x==f[x])return x;else return f[x]=fid(f[x]);}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)f[i]=i;
	for(int i=1;i<=m;i++)cin>>e[i].x>>e[i].y>>e[i].w;
	sort(e+1,e+m+1,cmp);
	for(int i=1;i<=m;i++)
	{
		int xx=fid(e[i].x);
		int yy=fid(e[i].y);
		if(xx==yy)continue;
		f[xx]=yy;
		ans+=e[i].w;
		num++;
		if(num==n-1)break;
	}
	if(num==n-1)cout<<ans<<endl;
	else cout<<"orz"<<endl;
	return 0;
}

标签:int,边权,最小,笔记,生成,算法,sb
From: https://www.cnblogs.com/Multitree/p/17322708.html

相关文章

  • Mathematica学习笔记002-数据导入导出
    如果不能把数据导入导出,Mathematica就只能是个大号计算器了。学会了导入导出,一方面可以把数据、图像结果保存,另一方面也可以将别的程序的中间结果导出成(txt或xls格式),然后交给Mathematica处理,让骑完成高精度计算和绘图。基本操作其实很简单Export["D:\\abc.txt",{{1,2},{3,4......
  • 什么是人工智能模型的多模态生成能力?
    人工智能模型的多模态生成能力是指模型可以生成多种不同形式的数据,例如图像、语音、文本等,以及它们之间的组合和交互。这种能力可以扩展模型的应用场景,使其能够更好地处理多种类型的数据,提高数据的多样性和丰富性。在自然语言处理领域,多模态生成通常是指将文本、图像和语音等多种......
  • Flink零基础学习笔记(一):基础概念
    一、ApacheFlink的定义、架构和原理ApacheFlink是一个分布式大数据处理引擎,可以对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据以内存速度进行快速计算。接下来我们介绍一下这些关键词的意义。处理无界和有界数据任何数据都......
  • MybatisPlusGenrator 代码生成器官方文档 运行不了?
    有dataSourceConfig就报错直接删掉......
  • 红帽认证RedHat-RHCSA shell的基本应用用户和组管理网络配置和防火墙管理笔记汇总
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • MsSql 根据表名和条件,生成Insert语句
    ALTERproc[dbo].[proc_insert](@tablenamevarchar(256),@wherevarchar(max))asbeginsetnocountondeclare@sqlstrvarchar(MAX)declare@sqlstr1varchar(MAX)declare@sqlstr2varchar(MAX)select@sqlstr='select''INSERT'+@tablename......
  • 【体验有奖】 玩转 AIGC,Serverless 一键部署 AI 图像生成服务
    玩转AIGC,5分钟Serverless部署StableDiffustion服务AI模型展现出的图像生成能力已经远超人们的预期,只需要给出文字描述就能创造出具有惊人视觉效果的图像,人人都是艺术家的时代即将来临。阿里云Serverless团队全新上线体验“基于函数计算FC+Serverless应用部署StableD......
  • Django练手小项目1:云笔记
    Django练手小项目1:云笔记1、创建项目专业版pycharm:新建项目->Django->路径下加上项目名python环境:manage.pystartproject项目名2、创建数据库,设计表结构3、新建应用专业版:点击:tools->运行manage.py->startapp应用名4、注册应用5、配置数据库6、更......
  • 学习笔记8
    第15章实现上的问题II一、知识点归纳二、问题与解决过程三、实践内容与截图第16章时钟二、问题与解决过程三、实践内容与截图第17章密钥服务器二、问题与解决过程三、实践内容与截图......
  • 前端小知识点扫盲笔记记录8
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结命令模式宏命令<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......