最小生成树

article/2025/6/24 8:08:54

1 最小生成树的概论

最小生成树的概念

2 Kruskal算法

首先我们要熟记最小生成树的概念
必须是无向带权图,必须保证连通性总的权值必须是最小的
如果无向带权图有n个节点,那么最小生成树一定有n-1个边

这个也被叫成k算法,很常用相比较prim算法
这个是不需要建图的,只需要构建并查集就可以解决问题
(实际解决的问题一般是权值最小是多少)

思路流程
1 首先我们要把这个根据这个权值把这些边进行排序
2 我们根据这个顺序进行挑选边,如果选择的当前边不会构成环,那么选择
3 如果这个边会构成环,那么我们就不选择

代码实现

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;const int MAXN = 10000;
int father[MAXN];
vector<vector<int>> edge;
int m, n;void build() {for (int i = 0; i < n; i++) {father[i] = i;}
}int find(int i) {if (i != father[i]) {father[i] = find(father[i]);}return father[i];
}bool binunion(int x, int y) {int fx = find(x);int fy = find(y);if (fx != fy) {father[fx] = fy;return true;}else {return false;}
}// 修正比较函数
bool comparebin(const vector<int>& a, const vector<int>& b) {return a[2] < b[2];  // 按权重比较
}int sort_k() {build();sort(edge.begin(), edge.end(), comparebin);  // 使用vector的迭代器int weightval = 0;int edgecount = 0;for (int i = 0; i < m; i++) {if (binunion(edge[i][0], edge[i][1])) {weightval += edge[i][2];edgecount++;if (edgecount == n - 1) {break;}}}return edgecount == n - 1 ? weightval : 0;
}int main() {cin >> n >> m;edge.resize(m, vector<int>(3));for (int i = 0; i < m; i++) {cin >> edge[i][0] >> edge[i][1] >> edge[i][2];}int ans = sort_k();if (ans == 0) {cout << "orz" << endl;}else {cout << ans << endl;}return 0;
}

我们这里的find,binunion,build是在并查集实现的
sort_k才是克鲁斯卡尔算法
这个克鲁斯卡尔算法十分的简单
思路梳理
1 构建一个初始化的并查集,然后对这个vector进行排序
2 然后判断每一个边,利用并查集判断是否可以进行合并,然后加上这个权值和这个边数,加上边数和权值就可以进行返回了
3 继续要先从小到大排序

3 Prim算法

这个算法也被叫成P算法

思路流程
1 开辟一个小根堆和一个数组,小根堆是用来装边的,数组是用来装顶点的,记录那些顶点走过
2 可以从图上的任意节点开始,然后把这个点放入到数组里面,把这个边都放到小根堆里
3 通过小根堆去往没有去过的点
A 如果这个点已经存在数组里,那么就直接把这个点给舍弃掉,重复步骤3
B 如果这个点没有存在数组里,那么就加权值和点个数,然后把这个点放入数组里,进入下一个点


http://www.hkcw.cn/article/RLJiZnUIrc.shtml

相关文章

网络系统中安全漏洞扫描为何重要?扫描啥?咋扫描?

在网络系统中&#xff0c;安全漏洞扫描占据着极其重要的位置&#xff0c;这一环节有助于我们发现并消除潜在的安全隐患&#xff0c;进而提高网络安全防护的等级。下面&#xff0c;我将对此进行详尽的说明。 基本概念 漏洞扫描技术可以揭示并评估网站存在的安全风险&#xff0…

2025年- H62-Lc170--34.在排序数组中查找元素的第一个和最后一个位置(2次二分查找,标记向左寻找,标记向右寻找)--Java版

1.题目描述 2.思路 3.代码实现 public class H34 {public int[] searchRange(int[] nums, int target) {int start findFirst(nums, target);int end findLast(nums, target);return new int[]{start, end};}// 查找第一个出现的位置public int findFirst(int[] nums, int t…

VR/AR 显示瓶颈将破!铁电液晶技术迎来关键突破

在 VR/AR 设备逐渐走进大众生活的今天&#xff0c;显示效果却始终是制约其发展的一大痛点。纱窗效应、画面拖影、眩晕感…… 传统液晶技术的瓶颈让用户体验大打折扣。不过&#xff0c;随着铁电液晶技术的重大突破&#xff0c;这一局面有望得到彻底改变。 一、传统液晶技术瓶颈…

基于空天地一体化网络的通信系统matlab性能分析

目录 1.引言 2.算法仿真效果演示 3.数据集格式或算法参数简介 4.MATLAB核心程序 5.算法涉及理论知识概要 5.1 QPSK调制原理 5.2 空天地一体化网络信道模型 5.3 空天地一体化网络信道特性 6.参考文献 7.完整算法代码文件获得 1.引言 空天地一体化网络是一种将卫星通信…

基于FashionMnist数据集的自监督学习(生成式自监督学习AE算法)

目录 一&#xff0c;生成式自监督学习 1.1 简介 1.2 核心思想 1.3 常见算法 1.3.1 自动编码器&#xff08;Autoencoder&#xff09; 1.3.2 生成对抗网络&#xff08;GANs&#xff09; 1.3.3 变分自编码器&#xff08;VAE&#xff09; 1.3.4 Transformer-based 模型&…

腾讯位置商业授权关键词输入提示开发指南

概述 用于获取输入关键字的补完与提示&#xff0c;帮助用户快速输入。本接口为纯HTTP数据接口&#xff0c;需配合前端程序实现Autocomplete&#xff08;自动完成&#xff09;的效果。 请求URL 该请求为GET请求 https://apis.map.qq.com/ws/place/v1/suggestion 请求参数 名称必…

【愚公系列】《生产线数字化设计与仿真》006-颜色分类站仿真(配置颜色分类站的气缸和传送带)

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

企业内训|客户智能营销实战——某头部车企

5月下旬&#xff0c;TsingtaoAI团队为某央企汽车厂商的智能驾驶业务运营团队交付“客户智能营销实战”课程。 本课程聚焦AI技术与汽车营销的深度融合&#xff0c;以“数据驱动大模型赋能”为核心&#xff0c;系统拆解智能营销全链路。课程从行业痛点切入&#xff0c;结合最新趋…

Mybatis-Plus简单介绍

前一篇文章中&#xff0c;小编介绍到了Mybatis&#xff0c;以及它的增强工具&#xff0c;mybatis-generator。 那么为了再减少对于SQL语句的编写&#xff0c;那么mybatis的另一个增强工具也是做出了巨大努力。 Mybaits-Plus Mybatis-Plus简称MP&#xff0c;它是一个Mybatis的…

LLm中 float16和 float32 区别,为什么训练不能采用float16--梯度消失

LLm中 float16和 float32 区别,为什么训练不能采用float16–梯度消失 在深度学习中,使用 float16(半精度)而非 float32(单精度)进行训练时,数值范围和精度的差异可能导致一系列问题,特别是当损失值达到 0.0001 这种较小时。以下是具体分析: 1. float16 与 float32 的…

Vue2之2组件通信

文章目录 什么是组件通信不同的组件关系 和 组件通信方案分类组件关系分类&#xff1a;组件通信方案分类 父子通信流程图&#xff1a;父传子子传父非父子通信 (拓展) - event bus 事件总线非父子通信 (拓展) - provide & inject 深入学习prop属性prop接收多个值props 是只读…

Qt -下载Qt6与OpenCV

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 前言 呃啊&#xff0c;本来就想在 Qt 里简单几个 OpenVC 的函数&#xff0c;没想到一搞就是一天。 我之前的开发环境是 Qt 5.14.2&#xff0c;使用 MinGW 7.3.0 64-bit 编…

8088单板机C语言sprintf()格式化串口输出---Prj04

#include "tiny_stdarg.h" // 使用自定义可变参数实现#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define PC16550_THR 0x1f0 #define PC16550_LSR 0x1f5 / //基本的IO操作函数 / char str[]"Hello World! 20250531 Ve…

HTML实现端午节主题网站:龙舟争渡,凭吊祭江诵君赋。

名人说&#xff1a;龙舟争渡&#xff0c;助威呐喊&#xff0c;凭吊祭江诵君赋。——苏轼《六幺令天中节》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、项目概览&#xff1a;传统与现代的技术碰撞1. 核心特…

YOLOv10改进|爆改模型|涨点|在颈部网络添加结合部分卷积PConv和SDI融合方法的PSDI特征融合层(附代码+修改教程)

一、文本介绍 本文修改的模型是YOLOv10&#xff0c;YOLOv10无需非极大值抑制&#xff08;NMS&#xff09;进行后处理&#xff0c;其推理速度以及参数量上都优于现有的模型。然而&#xff0c;针对某些目标检测任务中需要同时处理多尺度目标的挑战&#xff0c;YOLOv10 在此类场景…

Redis最佳实践——安全与稳定性保障之高可用架构详解

全面详解 Java 中 Redis 在电商应用的高可用架构设计 一、高可用架构核心模型 1. 多层级高可用体系 #mermaid-svg-Ffzq72Onkv7wgNKQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Ffzq72Onkv7wgNKQ .error-icon{f…

虚拟存储器:将十六进制逻辑地址 0A5C、103C、1A5C 转换成物理地址(2)

转换成十进制&#xff08;分步骤解析&#xff09; 确定页号和偏移的计算方式 页大小1KB 2^10&#xff0c;逻辑地址中 页号 逻辑地址 1024&#xff08;整数除法&#xff09;&#xff0c;页内偏移 逻辑地址 % 1024。物理地址 物理块号 1024 页内偏移&#xff0c;其中物理块…

【HTML】基础学习【数据分析全栈攻略:爬虫+处理+可视化+报告】

- 第 102 篇 - Date: 2025 - 05 - 31 Author: 郑龙浩/仟墨 文章目录 HTML 基础学习一 了解HTML二 HTML的结构三 HTML标签1 标题2 文本段落3 换行4 加粗、斜体、下划线5 插入图片6 添加链接7 容器8 列表9 表格10 class类 HTML 基础学习 一 了解HTML 一个网页分为为三部分&…

吴恩达MCP课程(2):research_server

目录 代码代码解释导入模块常量定义MCP服务器初始化工具函数定义1. search_papers 函数2. extract_info 函数 主程序总结 运行示例 代码 import arxiv import json import os from typing import List from mcp.server.fastmcp import FastMCPPAPER_DIR "papers"mc…

【数据结构】——二叉树--链式结构

一、实现链式结构二叉树 二叉树的链式结构&#xff0c;那么从名字上我们就知道我们这个二叉树的底层是使用链表来实现的&#xff0c;前面我们的二叉树是通过数组来实现的&#xff0c;那么在其是完全二叉树的情况下&#xff0c;此时我们使用数组来实现就会使得其空间浪费较少&a…