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

acwing算法基础之搜索与图论--kruskal算法

目录

  • 1 基础知识
  • 2 模板
  • 3 工程化

1 基础知识

kruskal算法的关键步骤为:

  1. 将所有边按照权重从小到大排序。
  2. 定义集合S,表示生成树。
  3. 枚举每条边(a,b,c),起点a,终点b,边长c。如果结点a和结点b不连通(用并查集来维护),则将这条边加入到集合S中。

kruskal算法的时间复杂度为O(mlogm),它用来解决稀疏图的最小生成树问题。

2 模板

int n, m;       // n是点数,m是边数
int p[N];       // 并查集的父节点数组struct Edge     // 存储边
{int a, b, w;bool operator< (const Edge &W)const{return w < W.w;}
}edges[M];int find(int x)     // 并查集核心操作
{if (p[x] != x) p[x] = find(p[x]);return p[x];
}int kruskal()
{sort(edges, edges + m);for (int i = 1; i <= n; i ++ ) p[i] = i;    // 初始化并查集int res = 0, cnt = 0;for (int i = 0; i < m; i ++ ){int a = edges[i].a, b = edges[i].b, w = edges[i].w;a = find(a), b = find(b);if (a != b)     // 如果两个连通块不连通,则将这两个连通块合并{p[a] = b;res += w;cnt ++ ;}}if (cnt < n - 1) return INF;return res;
}

3 工程化

题目1:求最小生成树。

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 2e5 + 10;
int p[N];
int n, m;struct Edge {int a, b, w;bool operator< (const Edge& W) const {return w < W.w;}
}edges[N];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}int main() {cin >> n >> m;for (int i = 0; i < m; ++i) {cin >> edges[i].a >> edges[i].b >> edges[i].w;}//初始化并查集for (int i = 1; i <= n; ++i) p[i] = i;sort(edges, edges + m);int res = 0, cnt = 0;for (int i = 0; i < m; ++i) {int a = edges[i].a, b = edges[i].b, w = edges[i].w;a = find(a);b = find(b);if (a != b) {p[a] = b;res += w;cnt ++;}}if (cnt < n-1) {cout << "impossible" << endl;} else {cout << res << endl;}return 0;
}

相关文章:

acwing算法基础之搜索与图论--kruskal算法

目录 1 基础知识2 模板3 工程化 1 基础知识 kruskal算法的关键步骤为&#xff1a; 将所有边按照权重从小到大排序。定义集合S&#xff0c;表示生成树。枚举每条边(a,b,c)&#xff0c;起点a&#xff0c;终点b&#xff0c;边长c。如果结点a和结点b不连通&#xff08;用并查集来…...

微信H5跳转微信小程序

官方文档&#xff1a;目录 | 微信开放文档 方法一&#xff1a;微信浏览器打开的h5跳转方式 HTML代码 <wx-open-launch-weapp id"launch-btn" username"所需跳转的小程序原始id" path"pages/pay/pay"><script type"text/wxtag…...

Yii2 引入 外部无命名空间的类,Class not found

记一次问题解决 问题描述 支付宝开放平台SDK v2 无命名空间。需 require 引入。 require Yii::$app->vendorPath."/alipay-sdk-php/v2/aop/AopClient.php"; var_dump(new AopClient([]));exit();上述写法会直接报错。 Class temporary\controllers\AopClient …...

设计模式是测试模式咩?

设计模式和测试模式概述 软件的生命周期为什么要进行测试&#xff08;测试的目的&#xff09;&#xff1f;软件的设计模式1. **瀑布模型**3. 增量和迭代模型4. 敏捷模型5. 喷泉模型 测试模型V模型W模型 一个应用程序从出生到“死亡”会经过非常漫长的流程…… 软件的生命周期 …...

Aspose.OCR for .NET 2023Crack

Aspose.OCR for .NET 2023Crack 为.NET在图片上播放OCR使所有用户和程序员都可以从特定的图像片段中提取文本和相关的细节&#xff0c;如字体、设计以及书写位置。这一特定属性为OCR的性能及其在扫描遵循排列的记录时的功能提供了动力。OCR的库使用一条线甚至几条线来处理这些特…...

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法!!!

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法 cuda10.0以及cudnn7.4现在以及安装完成&#xff0c;就差torch的安装了&#xff0c;现在torch我要装的是1.2.0版本的&#xff0c;安装包以及下载好了&#xff0c;安装包都是在这个网站里下载的&#xff08;点此进入&…...

后端面试问题(学习版)

JAVA相关 JAVA语言概述 1. 一个".java"源文件中是否可以包含多个类&#xff1f;有什么限制&#xff1f; 可以。 一个源文件可以声明多个类&#xff0c;但是最多只能有一个类使用public进行声明 且要求声明public的类的类名与源文件相同。 2. Java的优势&#xff…...

数据管理系统-week1-介绍

文章目录 一、数据它是什么&#xff1f;二、电子存储设备三、持久存储设备1、硬盘驱动器&#xff08;HDD&#xff09;、硬盘、硬盘驱动器是一种用于存储和检索数字信息的机电持久存储设备。2、固态硬盘&#xff08;SSD&#xff09;使用非易失性存储器&#xff0c;即使用NAND闪存…...

【SpringBoot】手写模拟SpringBoot核心流程

依赖包 新建一个工程&#xff0c;包含两个 module&#xff1a; springboot 模块&#xff0c;表示 springboot 源码实现&#xff1b;user 模块&#xff0c;表示业务系统&#xff0c;使用 springboot 模块&#xff1b; 依赖包&#xff1a;Spring、SpringMVC、Tomcat 等&#xff…...

应对.locked勒索病毒:恢复、预防全方位攻略

导言&#xff1a; .locked勒索病毒并非简单的数字威胁&#xff0c;它是一场对个人和企业数字资产的精密审判。这种病毒通过各种方式感染系统&#xff0c;从而以瞬间之间将用户的关键文件变成数字拼图&#xff0c;无情地要求赎金以换取解锁的密钥。如果您正在经历勒索病毒数据恢…...

基于DS1302时钟液晶12864显示2路闹钟仿真及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、DS1302采集年月日时分秒送到液晶12864显示。 3、按键年月日时分秒&#xff0c;两路闹钟。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 uchar clock_time[6] {0X00,0X59,0X23,0X09,0X…...

AGC034E Complete Compress

AGC034E Complete Compress 洛谷[AGC034E] Complete Compress 题目大意 给你一棵有 n n n个节点的树&#xff0c;并用 01 01 01串告诉你哪些节点上有棋子&#xff08;恰好一棵&#xff09;。 你可以进行若干次操作&#xff0c;每次操作可以将两颗距离至少为 2 2 2的棋子向彼…...

python设计模式12:状态模式

什么是状态机&#xff1f; 关键属性&#xff1a; 状态和转换 状态&#xff1a; 系统当前状态 转换&#xff1a;一种状态到另外一种状态的变化。 转换由触发事件或是条件启动。 状态机-状态图 状态机使用场景&#xff1a; 自动售货机 电梯 交通灯 组合锁 停车计时…...

JS对图片尺寸和DPI进行编辑修改(1寸照修改为2寸照)

各种报名都对照片有大小限制&#xff0c;鉴于这种情况&#xff0c;网上搜了后拼凑出了如下代码&#xff0c;用于解决1寸照片修改为2寸照片&#xff0c;同时将DPI修改为300&#xff0c;当然也可以根据自己的情况修改代码&#xff1a; HTML <input type"file" id&…...

EDA实验----四选一多路选择器设计(QuartusII)

目录 一&#xff0e;实验目的 二&#xff0e;实验仪器设备 三&#xff0e;实验原理&#xff1a; 四&#xff0e;实验要求 五&#xff0e;实验内容及步骤 1.实验内容 2.实验步骤 六&#xff0e;实验报告 七.实验过程 1.创建Verilog文件&#xff0c;写代码 2.波形仿真 …...

从windows iso文件中提取install.wim

1、首先从微软官方下载需要的windows镜像 https://www.microsoft.com/zh-cn/software-download/windows10/ 2、在下载的iso文件右键&#xff0c;打开压缩包&#xff0c;在sources文件夹下&#xff0c;应该就可以看到install.wim了。但似乎在最新的win10版本&#xff0c;微软采…...

Python的flask网页编程的GET和POST方法的区别

关于flask网页编程的GET及POST方法之间存在哪些区别问题&#xff0c;我们主要从以下六个关键点予以详细阐述&#xff1a; 首先需要明确的是&#xff0c;GET与POST两种不同类型的HTTP方法所采用的请求模式有所差别。其中&#xff0c;GET方法采用的是基于URL请求的机制&#xff…...

15 # 手写 throttle 节流方法

什么是节流 节流是限制事件触发的频率&#xff0c;当持续触发事件时&#xff0c;在一定时间内只执行一次事件&#xff0c;这个效果跟英雄联盟里的闪现技能释放差不多。 函数防抖关注一定时间连续触发的事件只在最后执行一次&#xff0c;而函数节流侧重于一段时间内只执行一次…...

puzzle(1612)拼单词、wordlegame

目录 拼单词 wordlegame 拼单词 在线play 找出尽可能多的单词。 如果相邻的话&#xff08;在任何方向上&#xff09;&#xff0c;你可以拖拽鼠标从一个字母&#xff08;方格&#xff09;到另一个字母&#xff08;方格&#xff09;。在一个单词中&#xff0c;你不能多次使用…...

【解决方案】pytion 运行时提示 import psutil ModuleNotFoundError: No module named ‘psutil‘

报错原因分析 import psutil ModuleNotFoundError: No module named psutil报错原因分析 当前环境pytion中缺少了psutil包&#xff0c;使用pip命令进行安装 解决方案 pip install psutil...

Java 微服务架构设计最佳实践:构建可扩展的分布式系统

Java 微服务架构设计最佳实践&#xff1a;构建可扩展的分布式系统别叫我大神&#xff0c;叫我 Alex 就好。今天我们来聊聊 Java 微服务架构设计的最佳实践&#xff0c;这些实践可以帮助我们构建更可扩展、更可靠的分布式系统。一、引言 微服务架构已经成为现代软件系统的主流架…...

从非隔离LED驱动器到SELV:为何你的照明设备需要这道“安全锁”?

1. 当LED灯条亮起时&#xff0c;你触摸到的可能是100多伏电压 去年装修新房时&#xff0c;我差点被客厅的LED灯带"咬"了一口。当时灯带接口处有些松动&#xff0c;我下意识伸手去调整&#xff0c;指尖突然传来一阵刺痛——后来用万用表测量才发现&#xff0c;这条标榜…...

响应式编程-Flux 背压机制与操作符链式调用源码解析

1. 响应式编程与背压机制基础 第一次接触响应式编程时&#xff0c;我被它的"数据流"概念深深吸引。想象一下&#xff0c;数据就像水管中的水流&#xff0c;而背压机制就是水管上的阀门控制——当水压过大时自动调节流量&#xff0c;防止爆管。这种设计完美解决了异步…...

BGE Reranker-v2-m3部署案例:离线考试阅卷系统中实现主观题参考答案语义匹配

BGE Reranker-v2-m3部署案例&#xff1a;离线考试阅卷系统中实现主观题参考答案语义匹配 1. 项目背景与需求场景 在传统的考试阅卷系统中&#xff0c;主观题评分一直是个让人头疼的问题。特别是像简答题、论述题这类题目&#xff0c;学生的答案五花八门&#xff0c;但表达的意…...

git 修改项目远程仓库地址

1. 查看当前远程仓库地址 git remote get-url origin 或 git remote -v2. 修改远程仓库地址 git remote set-url origin <新的远程仓库地址>3. 查看是否切换成功 git remote -v...

小白程序员入门网络安全:收藏版,从零开始学密码学

小白程序员入门网络安全&#xff1a;收藏版&#xff0c;从零开始学密码学 本文带领读者进入网络安全的世界&#xff0c;从密码学的发展历史、古典密码、分组密码、流密码、杂凑函数到公钥密码&#xff0c;全面介绍了密码学的基础知识和应用。文章涵盖了凯撒密码、维吉尼亚密码…...

Arduino无阻塞时序库AutomationTimers:零中断、零动态内存的工业级定时方案

1. 项目概述AutomationTimers 是一个专为 Arduino 平台设计的轻量级、无阻塞事件时序管理库&#xff0c;其核心目标是在资源受限的微控制器上&#xff0c;以零硬件定时器依赖、零中断占用、零动态内存分配的方式&#xff0c;实现高可靠性的软件定时与信号处理逻辑。该库不封装任…...

神经网络架构图可视化宝典:轻松绘制专业深度学习图表

神经网络架构图可视化宝典&#xff1a;轻松绘制专业深度学习图表 【免费下载链接】Neural-Network-Architecture-Diagrams Diagrams for visualizing neural network architecture 项目地址: https://gitcode.com/gh_mirrors/ne/Neural-Network-Architecture-Diagrams 你…...

基于STM32的触控USB鼠标设计

一、系统概述与核心功能 1. 系统定位 基于STM32的触控USB鼠标以“触摸输入采集-坐标转换-USB HID协议封装-即插即用”为核心&#xff0c;将触摸传感器&#xff08;电容/电阻式&#xff09;的触摸位置、手势动作转换为标准USB鼠标事件&#xff08;移动、点击、滚动&#xff09;&…...

大族打标机 TCP 工具类优先设计 + 追溯打标业务落地

本文按工程实施顺序组织&#xff1a;大族 TCP 客户端工具类源码&#xff1b;追溯打标业务源码&#xff1b;IP、端口、模板名动态配置方案&#xff08;含建表 SQL&#xff09;。一、大族打标机 TCP 工具类1.1 协议约定大族打标常见指令&#xff08;ASCII&#xff09;&#xff1a…...