【算法】Prim算法(求最小生成树)
题目
给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。
求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。
给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。
由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。
输入格式
第一行包含两个整数 n 和 m。
接下来 m 行,每行包含三个整数 u,v,w,表示点 u 和点 v 之间存在一条权值为 w 的边。
输出格式
共一行,若存在最小生成树,则输出一个整数,表示最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。
数据范围
1≤n≤500
1≤m≤10^5
图中涉及边的边权的绝对值均不超过 10000
思路
建立一个集合,将距离这个集合最近的节点s放入集合内部,然后使用节点s对其他节点到集合的距离进行更新,st[s]=true;表示节点s已经被放入集合,已经放入集合的元素不能再次被放入集合。然后开始下一次循环,每次放入一个节点到集合中,一共遍历n次(一共n个点)。
代码
#include<bits/stdc++.h>
#define N 510
using namespace std;
const int INF = 0x3f3f3f3f;
int n,m;// n个点,m条边
int g[N][N];// 表示点i到点j的距离(不邻接的话为正无穷)
int dist[N];// 表示点i到集合的最小距离
bool st[N];// 表示点i是否在集合内部int prim()
{memset(dist,0x3f,sizeof(dist));// 将距离初始化为正无穷int res = 0;for(int i = 0; i < n; i ++)// 遍历n个点{int t = -1;for(int j = 1; j <= n; j ++)// 遍历所有点if(!st[j] && (t == -1 || dist[t] > dist[j]))// 找到不在集合内部,并且距离集合最近的点t = j;if(i && dist[t] == INF) return INF; // 如果找不到距离小于正无穷的点,则代表这个图不连通,没有最小生成树(当i等于零时,集合还没有元素,不能进行判断)if(i) res += dist[t];// 将这条最小边加起来,是建成最小生成树的其中一条边(当i等于零时,集合还没有元素,不能进行判断)for(int j = 1;j <= n; j ++) dist[j] = min(dist[j],g[t][j]);// 使用这个点对这其他点进行更新st[t] = true;// 这个点已经在集合内部了}return res;// 返回最小生成树的长度
}int main()
{cin >> n >> m;// 输入点数,边数memset(g,0x3f,sizeof(g));while(m --){int a,b,c;cin >> a >> b >> c;// 输入点a到点b之间的距离g[a][b] = g[b][a] = min(g[a][b],c);// 建立无向图}int t = prim();if( t == INF ) cout << "impossible" << endl;else cout << t << endl;return 0;
}
相关文章:
【算法】Prim算法(求最小生成树)
题目 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。 给定一张边带权的无向图 G(V,E),其中 V 表示图中点的集合,E…...
go语言,yaml实现简单的workflow工作流
目录 1.创建一个yaml文件,名字可以是student.yaml 2.创建go文件测试 3.执行结果 本文章内容,只是一个简单的案例,但足够映射到一个大的项目中。 工作流作用:工作流的作用就是通过yaml配置文件,将关于本工作流的一个…...
BaiduMallServcie
说明 本文档指导业务开发步骤 BaiduMallServcie 说明一. 登录业务1.1 数据库设计1.1.1 管理员表1.1.2 角色表1.1.3 关联表 管理员表与角色表关联1.1.4 权限表1.1.5 关联表 角色表与权限表关联1.1.6 管理员登录日志表1.1.7 查询权限示例1.2 添加用户一. 登录业务 1.1 数据库设…...
vue3+jsx+antd的插槽写法之一
如果在jsx里面直接这样按照官方的写法是会报错的 正确写法是:...
Shell 学习之 if 命令
1. 执行流程 在 Shell 脚本中,if 是一个 控制流语句,用于进行条件判断,根据条件的结果执行相应的操作。 # 首先,Shell 会检查表达式 condition 返回的 boolean 值。 # 如果 condition 的值为真,则执行 then 代码块&a…...
android 同步 服务器 时间
要将 Android 设备与服务器同步时间,可以通过以下两种方式实现: NTP 协议同步时间 NTP(Network Time Protocol)是一种网络协议,用于同步计算机的时间。Android 设备可以使用 NTP 协议来同步服务器时间。 Android 应…...
10、电路综合-基于简化实频的宽带匹配电路设计方法
10、电路综合-基于简化实频的宽带匹配电路设计方法 网络综合和简化实频理论学习概述中的1-9介绍了SRFT的一些基本概念和实验方法,终于走到了SRFT的另一个究极用途,宽带匹配电路的设计。 1、之前的一些回顾与总结 之前也给出了一些电路综合的案例&…...
N-130基于springboot,vue校园社团管理系统
开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plus 本系…...
Syntax Error: TypeError: this.getOptions is not a function的解决(Vue)
报错信息: TypeError: this.getOptions is not a function 这个是在运行项目是遇到的问题 这个报错是类型错误,this.getOptions 不是一个函数 。这个错误一般就是less-loader库里的错误。 主要是less-loader版本太高,不兼容this.getOptions…...
使用 kube-downscaler 降低Kubernetes集群成本
新钛云服已累计为您分享772篇技术干货 介绍 Kube-downscaler 是一款开源工具,允许用户定义 Kubernetes 中 pod 资源自动缩减的时间。这有助于通过减少非高峰时段的资源使用量来降低基础设施成本。 在本文中,我们将详细介绍 kube-downscaler 的功能、安装…...
LeetCode热题100——哈希表
哈希表 1.两数之和2.字母异位词分组3.最长连续序列 1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。可以按任意顺序返回答案。 // 题解思路:使用哈…...
Kubeadm
目录 绪论:实验步骤 1、环境准备 2、所有节点安装docker 3、所有节点安装kubeadm,kubelet和kubectl 4、部署K8S集群 5、部署 Dashboard 6、安装Harbor私有仓库 master(2C/4G,cpu核心数要求大于2) 192.168.…...
【Overload游戏引擎细节分析】PBR材质Shader---完结篇
PBR基于物理的渲染可以实现更加真实的效果,其Shader值得分析一下。但PBR需要较多的基础知识,不适合不会OpenGL的朋友。 一、PBR理论 PBR指基于物理的渲染,其理论较多,需要的基础知识也较多,我在这就不再写一遍了&…...
C++设计模式_18_State 状态模式
State和Memento被归为“状态变化”模式。 文章目录 1. “状态变化”模式1.1 典型模式 2. 动机 (Motivation)3. 代码演示State 状态模式3.1 常规方式3.2 State 状态模式 4. 模式定义5. 结构( Structure )6. 要点总结7. 其他参考 1. “状态变化”模式 在组件构建过程中…...
详解final, abstract, interface关键字
一.final关键字 1.final关键字介绍 ——final关键字可以去修饰类、方法、属性和局部变量 2.final关键字的作用 1)final修饰类,这个类不能被其他类继承 2)final修饰方法,方法不能被重写 3)final修饰属性,属…...
统计特殊四元组
题记: 给你一个 下标从 0 开始 的整数数组 nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 : nums[a] nums[b] nums[c] nums[d] ,且a < b < c < d 示例 1: 输入: nums [1,2,3…...
腾讯云轻量应用服务器“镜像”怎么选择合适?
腾讯云轻量应用服务器镜像怎么选择?如果是用来搭建网站可以选择宝塔Linux面板腾讯云专享版,镜像系统根据实际使用来选择,腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器镜像的选择方法: 腾讯云轻量应用服务器镜像选择 轻量…...
Ruby模块和程序组织
和类一样,模块是一组方法和常量的集合。 和类不同,模块没有实例,取而代之的是可以将特殊模块的功能添加到一个类或者指定对象之中。 Class类是Module类的一个子类,因此每一个类对象也是一个模块对象 一、模块创建和基础应用 编写…...
14、SpringCloud -- WebSocket 实时通知用户
目录 实时通知用户需求:代码:前端:后端:WebSocket创建 websocket-server 服务添加依赖:配置 yml 和 启动类:前端:后端代码:注意:测试:总结:实时通知用户 需求: 用户订单秒杀成功之后,对用户进行秒杀成功通知。 弹出个提示框来提示。 代码: 前端:...
智能井盖传感器推荐,万宾科技助力城市信息化建设
随着科技产品更新换代进程加快,人工智能在人们日常生活之中逐渐普及开来,深入人们生活的方方面面,影响城市基础设施建设工程。例如在大街小巷之中的井盖作为城市基础建设的一个重要部分,一旦出现松动倾斜或凸起等异常问题…...
手把手教你用RK3576开发板驱动RC522读卡器:一个SPI实战项目的完整配置流程
手把手教你用RK3576开发板驱动RC522读卡器:一个SPI实战项目的完整配置流程 在嵌入式开发领域,能够独立完成一个从硬件连接到软件驱动的完整项目,是每个开发者成长的必经之路。RK3576作为一款性能强劲的开发板,搭配常见的RC522读卡…...
pyenv多版本Python管理实战:从安装到日常开发常用命令大全
pyenv多版本Python管理实战:从安装到日常开发常用命令大全 作为Python开发者,你是否经常遇到这样的困扰:项目A需要Python 3.6,项目B需要Python 3.9,而本地环境只能安装一个版本?或者团队协作时,…...
当前主流的AI编程助手Trae、Cursor、通义灵码功能对比分析
Trae、Cursor和通义灵码是当前主流的AI编程助手,它们在功能定位、技术架构和使用体验上各有特色。以下是三款工具的详细对比分析: Trae详细操作手册和常见问题解决,请访问http://www.zrscsoft.com/sitepic/12166.html 一、核心功能对比 功能…...
Spring Security实战:Bcrypt加密算法在用户密码存储中的正确使用姿势(附完整代码)
Spring Security实战:Bcrypt加密算法在用户密码存储中的正确使用姿势(附完整代码) 在当今数字化时代,用户密码安全已成为系统开发中最基础也最关键的一环。作为开发者,我们经常面临一个核心问题:如何在数据…...
【Hung-yi Lee】《Introduction to Generative Artificial Intelligence》(6)
图片来自于 midjourney Introduction to Generative AI 2024 Spring 文章目录第11講:大型語言模型在「想」什麼呢? — 淺談大型語言模型的可解釋性(24.05.03)参考第11講:大型語言模型在「想」什麼呢? — 淺…...
Qt, C++数据类型扩展问题
Qt项目中ObjectDic类的类型扩展与代码优化 前言 在Qt项目开发中,我们经常会遇到需要处理不同类型数据的情况,尤其是当涉及到负数时,类型的选择就显得尤为重要。本文将详细介绍如何在Qt项目中扩展ObjectDic类的类型支持,从无符号整…...
万象视界灵坛快速部署:GitLab CI流水线自动触发镜像构建与K8s滚动更新
万象视界灵坛快速部署:GitLab CI流水线自动触发镜像构建与K8s滚动更新 1. 项目概述 万象视界灵坛(Omni-Vision Sanctuary)是一款基于OpenAI CLIP技术的高级多模态智能感知平台。该平台通过创新的像素风格界面,将复杂的语义对齐过…...
WubiUEFI终极指南:如何在Windows中零风险安装Ubuntu系统
WubiUEFI终极指南:如何在Windows中零风险安装Ubuntu系统 【免费下载链接】wubiuefi fork of Wubi (https://launchpad.net/wubi) for UEFI support and for support of recent Ubuntu releases 项目地址: https://gitcode.com/gh_mirrors/wu/wubiuefi 你是否…...
实战应用:基于快马AI与OpenClaw构建Mac本地电商价格监控系统
最近在做一个电商价格监控的小工具,发现用OpenClaw配合Mac本地环境搭建特别方便。这里分享一下我的实战经验,希望能帮到有类似需求的同学。 为什么选择OpenClaw OpenClaw是个轻量级的Python爬虫框架,特别适合需要快速搭建数据采集系统的场景…...
在模具设计领域,结构受压变形分析就像给钢铁骨架做“压力测试“。COMSOL的稳态研究模块能快速完成这类强度验证,但实际操作中有几个魔鬼细节需要特别注意
用comsol软件进行结构的受压变形分析,计算结构受压时应力分布及应变情况,预测模具的强度是否符合要求。 模型采用装配体,可以使用稳态研究,加快计算速度,在各零件接触的面设置接触对,对顶针施加位移&#x…...
