当前位置: 首页 > article >正文

ruskal 最小生成树算法

 https://www.lanqiao.cn/problems/17138/learning/

并查集+ruskal 最小生成树算法

Kruskal 算法是一种用于在加权无向连通图中寻找最小生成树(MST)的经典算法。其核心思想是基于贪心策略,通过按边权从小到大排序并逐步选择边,确保最终形成的树满足以下条件:

  1. 包含图中所有顶点(即生成树)。
  2. 边权之和最小(即最小性)。
  3. 不形成环路(确保是树结构)。

算法步骤

排序边:将图中所有边按权值从小到大排序。

初始化并查集:每个顶点初始时属于独立的集合,用于检测环路。

遍历选边:依次遍历排序后的边,若当前边的两个顶点不属于同一集合,则选择这条边加入最小生成树,并将两个顶点的集合合并;若属于同一集合(选边会形成环路),则跳过这条边。

终止条件:当选取的边数达到 顶点数 - 1 时,算法终止,此时已得到最小生成树。

关键数据结构:并查集(Union-Find)

作用:高效判断两个顶点是否连通(属于同一集合),并快速合并集合,确保算法时间复杂度为 O(E log E)(E 为边数)。

查找(Find):确定顶点所在的集合根节点。

合并(merge):将两个不同集合合并为一个集合。

package lanqiao;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;public class Main {static int[] union;public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();List<int[]> list=new ArrayList();for(int i=0;i<m;i++) {int[] arr=new int[3];arr[0]=scan.nextInt();arr[1]=scan.nextInt();arr[2]=scan.nextInt();list.add(arr);}//并查集初始化union=new int[n+1];for(int i=1;i<=n;i++) {union[i]=i;}//Kruskal 最小生成树算法list.sort(((a,b)->a[2]-b[2]));int edgs=0;int max=Integer.MIN_VALUE;for(int[] arr:list) {int x=find(arr[0]);int y=find(arr[1]);if(x!=y) {edgs++;max=Math.max(max, arr[2]);merge(arr[0],arr[1]);}// 如果已经添加了n-1条边,说明已经得到了最小生成树,输出最大边权并结束程序if(edgs==n-1) {System.out.println(max);return;}}System.out.println(-1);}//查找public static int find(int x) {if(x!=union[x]) {union[x]=find(union[x]);  //路径压缩优化,使在递归过程中,//直接把arr[x]变为根结点,从而减少下一次查询的时间}return union[x];}//合并public static void merge(int x,int y) {x=find(x);y=find(y);if(x!=y) {union[x]=union[y];  //把y的根结点变成x的根结点}}}

相关文章:

ruskal 最小生成树算法

https://www.lanqiao.cn/problems/17138/learning/ 并查集ruskal 最小生成树算法 Kruskal 算法是一种用于在加权无向连通图中寻找最小生成树&#xff08;MST&#xff09;的经典算法。其核心思想是基于贪心策略&#xff0c;通过按边权从小到大排序并逐步选择边&#xff0c;确保…...

【GESP】C++三级模拟题 luogu-B3848 [GESP样题 三级] 逛商场

GESP三级模拟样题&#xff0c;一维数组相关&#xff0c;难度★★✮☆☆。 题目题解详见&#xff1a;https://www.coderli.com/gesp-3-luogu-b3848/ 【GESP】C三级模拟题 luogu-B3848 [GESP样题 三级] 逛商场 | OneCoderGESP三级模拟样题&#xff0c;一维数组相关&#xff0c;…...

精益数据分析(62/126):从客户访谈评分到市场规模估算——移情阶段的实战进阶

精益数据分析&#xff08;62/126&#xff09;&#xff1a;从客户访谈评分到市场规模估算——移情阶段的实战进阶 在创业的移情阶段&#xff0c;科学评估用户需求与市场潜力是决定产品方向的关键。今天&#xff0c;我们结合Cloud9 IDE的实战经验与《精益数据分析》的方法论&…...

MAC-OS X 命令行设置IP、掩码、网关、DNS服务器地址

注意&#xff1a;以下命令必须在 $root 特权模式下运行&#xff0c;即&#xff1a;人们需要显著的提权后才能操作。 设置IP sudo networksetup -setmanual "Ethernet" 192.168.0.22 255.255.255.0 192.168.0.8 设置DNS sudo networksetup -setdnsservers "Eth…...

腾讯怎样基于DeepSeek搭建企业应用?怎样私有化部署满血版DS?直播:腾讯云X DeepSeek!

2025新春&#xff0c;DeepSeek横空出世&#xff0c;震撼全球&#xff01; 通过算法优化&#xff0c;DeepSeek将训练与推理成本降低至国际同类模型的1/10&#xff0c;极大的降低了AI应用开发的门槛。 可以预见&#xff0c;2025年&#xff0c;是AI应用落地爆发之年&#xff01; ✔…...

表记录的检索

1.select语句的语法格式 select 字段列表 from 表名 where 条件表达式 group by 分组字段 [having 条件表达式] order by 排序字段 [asc|desc];说明&#xff1a; from 子句用于指定检索的数据源 where子句用于指定记录的过滤条件 group by 子句用于对检索的数据进行分组 ha…...

QT——概述

<1>, Qt概述 Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 Qt ⽀持多种开发⼯具&#xff0c;其中⽐较常⽤的开发⼯具有&#xff1a;Qt Creator、Visual Studio、Eclipse. 一&#xff0c;Qt Creator 集成开发环境&#xff08;IDE&#xff09; Qt Creator 是⼀个轻量…...

9.1.领域驱动设计

目录 一、领域驱动设计核心哲学 战略设计与战术设计的分野 • 战略设计&#xff1a;限界上下文&#xff08;Bounded Context&#xff09;与上下文映射&#xff08;Context Mapping&#xff09; • 战术设计&#xff1a;实体、值对象、聚合根、领域服务的构建原则 统一语言&am…...

DataHub:现代化元数据管理的核心平台与应用实践

一、DataHub平台概述 DataHub是由LinkedIn开源并持续维护的下一代元数据管理平台&#xff0c;它采用实时流式架构&#xff08;基于Kafka&#xff09;实现元数据的收集、处理和消费&#xff0c;为现代数据栈提供了端到端的元数据解决方案。作为数据治理的基础设施&#xff0c;D…...

【Python 正则表达式】

Python 正则表达式通过 re 模块实现模式匹配&#xff0c;是文本处理的核心工具。以下是系统化指南&#xff0c;包含语法详解和实战案例&#xff1a; 一、正则基础语法 1. 元字符速查表 符号含义示例匹配结果.任意字符&#xff08;除换行符&#xff09;r"a.c"“abc”…...

ubuntu服务器版启动卡在start job is running for wait for...to be Configured

目录 前言 一、原因分析 二、解决方法 总结 前言 当 Ubuntu 服务器启动时&#xff0c;系统会显示类似 “start job is running for wait for Network to be Configured” 或 “start job is running for wait for Plymouth Boot Screen Service” 等提示信息&#xff0c;并且…...

list简单模拟实现

成员变量迭代器&#xff08;重点&#xff09;ListIterator运算符重载begin、end 插入、删除inserterase头插、尾插、头删、尾删 operator->const_iterator拷贝构造operator析构函数完整代码 由于前面已经模拟实现了vector&#xff0c;所以这里关于一些函数实现就不会讲的过于…...

QT6 源(101)阅读与注释 QPlainTextEdit,其继承于QAbstractScrollArea,属性学习与测试

&#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;属性学习与测试 &#xff1a; &#xff08;4&#xff09; &#xff08;5&#xff09; 谢谢...

Coze 实战教程 | 10 分钟打造你的AI 助手

> 文章中的 xxx 自行替换&#xff0c;文章被屏蔽了。 &#x1f4f1; 想让你的xxx具备 AI 对话能力&#xff1f;本篇将手把手教你&#xff0c;如何用 Coze 平台快速构建一个能与用户自然交流、自动回复提问的 xxx助手&#xff0c;零代码、超高效&#xff01; &#x1f4cc;…...

Spring Boot中Redis序列化配置详解

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在使用Spring Boot集成Redis时&#xff0c;序列化方式的选择直接影响数据存储的效率和系统兼容性。默认的JDK序列化存在可读性差、存储空间大等问题&am…...

【spring】spring源码系列之九:spring事务管理(上)

系列文章目录 前言 在开始spring事务管理的源码分析之前&#xff0c;我们先自己尝试简单实现一下事务管理&#xff0c;实现事务的传递 一、事务的使用 有了spring之后&#xff0c;事务的使用变得简单&#xff0c;但是封装得也更深&#xff0c;功能也更复杂&#xff0c;也更…...

牛客网 NC22167: 多组数据a+b

牛客网 NC22167: 多组数据ab 题目分析 这道题目来自牛客网&#xff08;题号&#xff1a;NC22167&#xff09;&#xff0c;要求我们计算两个整数a和b的和。乍看简单&#xff0c;但有以下特殊点需要注意&#xff1a; 输入包含多组测试数据每组输入两个整数当两个整数都为0时表示…...

K8S Ingress、IngressController 快速开始

假设有如下三个节点的 K8S 集群&#xff1a; ​ k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、理论介绍 1&#xff09;什么是 Ingress 定义&#xff1a;Ingress 是 Kubernetes 中的一种资源对象&#xff0c;它定义了外部访问集群内…...

GitHub 趋势日报 (2025年05月14日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1xming521/WeClone&#x1f680;从聊天记录创造数字分身的一站式解决方案&…...

快消零售AI转型:R²AIN SUITE如何破解效率困局

引言 快消零售行业正经历从“规模扩张”到“精益运营”的转型阵痛&#xff0c;消费者需求迭代加速、供应链复杂度攀升、人力成本持续走高&#xff0c;倒逼企业通过技术升级实现业务重塑[1]。RAIN SUITE以AI应用中台为核心&#xff0c;针对快消零售场景打造全链路提效方案&…...

电路中零极点的含义

模拟电路中的零极点设计非常重要&#xff0c;涉及到系统的稳定。零点是开环传输函数分子为0时对应的频率。极点就是开环传递函数分子为0时对应的频率。 零点表征电路中能量输出路径的抵消效应&#xff0c;当不同支路的信号大小相等、方向相反时&#xff0c;导致特定频率下响应…...

解读RTOS 第八篇 · 内核源码解读:以 FreeRTOS 为例

1. 引言 FreeRTOS 作为最流行的嵌入式实时操作系统之一,其内核源码简洁且功能完善。通过剖析其关键模块(任务管理、调度器、队列、内存管理和移植层),不仅能够更深入地理解 RTOS 的运行机制,还能掌握根据项目需求进行内核定制与优化的能力。本章将带你以 FreeRTOS 10.x 版…...

2025年长三角+山东省赛+ 认证杯二阶段资料助攻说明

长三角高校数模B题 完整论文代码已经在售后群 网盘链接 发布 长三角更新时间轴 5.15 23:00 B站发布 完整论文讲解视频 5.16 18:00 j降重说明 5.17 22:00 无水印版本可视化无水印代码 其余时间 写手老师 售后群在线答疑 山东省助攻C道 认证杯二阶段助攻C题 山东省认证杯…...

平滑过滤值策略

该策略是一种基于技术分析的交易策略,主要通过计算一系列指标来判断市场趋势,并根据这些指标生成交易信号。 策略概述 该策略的核心在于利用多个技术指标来分析市场动态,并据此制定交易决策。它结合了价格动量、波动性和趋势跟踪等多种因素,旨在提高交易的准确性和效率。…...

MATLAB安装全攻略:常见问题与解决方案

MATLAB安装常见问题与解决方案 一、系统兼容性验证 安装前需确认操作系统满足MATLAB版本要求&#xff1a; Windows 10版本1903及以上&#xff08;64位&#xff09;macOS Monterey 12.6及以上Ubuntu 22.04 LTS及以上 验证命令示例&#xff1a; # Linux系统验证 lsb_release…...

Apache HttpClient 5 用法-Java调用http服务

Apache HttpClient 5 核心用法详解 Apache HttpClient 5 是 Apache 基金会推出的新一代 HTTP 客户端库&#xff0c;相比 4.x 版本在性能、模块化和易用性上有显著提升。以下是其核心用法及最佳实践&#xff1a; 一、添加依赖 Maven 项目&#xff1a; <dependency><…...

鸿蒙电脑:五年铸剑开新篇,国产操作系统新引擎

出品 | 何玺 排版 | 叶媛 前不久&#xff0c;玺哥发布的《鸿蒙电脑&#xff0c;刺向垄断的利刃&#xff0c;将重塑全球PC市场格局》发布后&#xff0c;获得了读者朋友的积极反馈&#xff0c;不少都期望鸿蒙电脑早日发布。 如今&#xff0c;它真来了&#xff01; 5月8日&…...

AI大模型:(二)2.5 人类对齐训练自己的模型

目录 1.人类对齐原理 1.1. 偏好学习(人类反馈,RLHF/DPO) 1.2. 奖励模型(AI的“打分老师”) 1.3. 价值观约束(如宪法AI) 2.如何人类对齐训练 2.1.对比学习(人类反馈 RLHF/DPO) 2.2.考试评分(奖励模型训练) 2.3.底线教育(安全防护) 2.4.持续优化(在线学习…...

算法图表总结:查找、排序与递归(含 Mermaid 图示)

算法图表总结&#xff1a;查找、排序与递归&#xff08;含 Mermaid 图示&#xff09; 分类标签&#xff1a;算法、数据结构、Mermaid、技术图表 关键词&#xff1a; 算法可视化、Mermaid 图表、数据结构、二分查找、快速排序、递归树 摘要&#xff1a; 本文通过 Mermaid 图表…...

【redis】jedis客户端的使用

Jedis是Redis官方推荐的Java客户端库&#xff0c;提供了对Redis数据库的全面支持&#xff0c;适用于单机、哨兵及集群模式。作为最老牌的Java Redis客户端&#xff0c;其API设计直观&#xff0c;与Redis命令高度对应&#xff0c;例如set、get等方法与原生命令一致&#xff0c;降…...