图论2图的应用补充
图的应用
4.1 拓扑排序
拓扑排序针对有向无环图的顶点进行线性排列的算法,使得对于任何来自顶点A指向顶点B的边,A都在序列中出现在B之前。这样的排序存在于有向无环图中,而对于非有向无环图则不存在拓扑排序。
拓扑排序也可以用来检测图中有无成环
4.2 最小生成树
生成树是连通图的极小连通子图,多一条边就会成环,少一条边即无法构成连通图
生成树的代价:
G=(V,E)是一个无向连通图,代价是生成树上各边的边权和
生成树代价=9+49+11+1+21=91
最小生成树即是代价最小的生成树
上图中代价min=1+7+10+7+5=30
最小生成树解析
4.2.1 Kruskal(加边)
将边从小到大排序
利用并查集 合并边
如果该边的加入不会成换,则加入,否则不加入
时间复杂度分析:边排序时间+并查集时间
蓝桥账户中心
蓝桥889
# n 个交叉路口 -- n个点 m条边 无向图
# 最小生成树
# 1≤n≤300,1≤m≤1e5 边>>点 稠密图 最好用Prmie
# Kruskal版
n,m = map(int,input().split())
# 存图
e = []
# m条边 连边
for i in range(m):
u,v,c = map(int,input().split())
e.append((c,u,v)) # 把分值c放第一位,方便后续排序
# 边排序
e.sort()
# 把所有的交叉路口直接或间接的连通起来 -- 并查集
p = list(range(n+1))
# 递归找根
def find_root(x):if x != p[x]:
p[x] = find_root(p[x])return p[x]
# 从小到大遍历所有边,进行合并 找最小的生成树
# sum记录边权和,max_val记录最大的边权
sum, max_val = 0,0
for w,u,v in e:
rootu = find_root(u)
rootv = find_root(v)if rootv != rootu:
p[rootv] = rootu# 合并次数+1 修路的条数+1sum += 1
max_val = max(max_val,w)
print(sum,max_val)
4.2.2 Prime(加点)
算法流程:d[i]表示点i和集合的距离
选择一个初始点(随意)u加入集合S,d[u]=0
利用点u更新其它的点(加入离当前集合最近的点)
在d中选择最小未加入集合的点作为新一轮的u
重复上述至所有点加入集合(过程中有两个分区,一个是加入集合的点,另一个是还未加入的点)
# 蓝桥889
# n 个交叉路口 -- n个点 m条边 无向图
# 最小生成树
# 1≤n≤300,1≤m≤1e5 边>>点 稠密图 最好用Prmie
# Prime版
import math
n,m = map(int,input().split())
INF = math.inf
# 存图
mapp = [[INF]*(n+1) for _ in range(n+1)]
for _ in range(m):
u,v,w = map(int,input().split())
mapp[u][v] = mapp[v][u] = min(mapp[u][v],w)
# 定义集合d
d = [INF] * (n+1)
max_val = 0
# 初始化d[1]=0
u = 1
# 跑Prime加点
for i in range(n-1): # 除去第一个点,还有n-1个点
d[u] = 0
# 初始化下一个点,下一条边
next_u = 0
next_val = INF
for v in range(1,n+1):
if d[v] == 0: continue # 该点不与当前集合d连通
d[v] = min(d[v], mapp[u][v]) # mapp[u][v]点u到v的边权
# 第i次加点时找到离当前集合更近的点
if d[v] < next_val:
next_val = d[v]
next_u = v
# 基于上一轮扩大下一轮集合,更新d
u = next_u
max_val = max(next_val, max_val)
print(n-1, max_val)
4.3 最短路问题
最短路径是两个顶点之间经历的边上边权之和最小的可达路径
4.3.1 Floyed
用于处理多源最短路,从多个点出发到一个点的最短路,可以存在负权边。
蓝桥账户中心
蓝桥8336
# n点m边
# floyd 利用动态规划 三层循环
# 定义dp[k][i][j]表示点i到点j的路径(除去起点和终点)中编号最大不超过k的情况下,i到j的最短距离
# 当加入 第k个点 作为i到j的 中间点
# dp[k][i][j] = mian(dp[k-1][i][j], dp[k-1][i][k]+dp[k-1][k][j])
import math
n,m = map(int,input().split())
# 城市i的商品产量
a = [0] * (n+1)
# 城市i的商品生产成本
p = [0] * (n+1)
# 城市i的商品售卖单价
s = [0] * (n+1)
INF = math.inf
# 一件商品从城市i运往城市j的利润:gi,j=sj-pi-fij
# 其中fi,j是路径费用
f = [[INF] *(n+1) for _ in range(n+1)] # fij为INF表示不通路
g = [[0] *(n+1) for _ in range(n+1)]
# 输入a,p,s
for i in range(1,n+1):
a[i],p[i],s[i] = map(int,input().split())
# 输入图
for i in range(1,m+1):
u,v,w = map(int,input().split())
f[u][v] = f[v][u] = min(f[u][v],w)
# 对角线费用为0 n个点
for i in range(1,n+1):
f[i][i] = 0
# floyd 动态规划 三层循环 跑一遍多源全图最短路填f路费表
for k in range(1,n+1):for i in range(1,n+1):for j in range(1,n+1):
f[i][j] = min(f[i][j], f[i][k] + f[k][j])
# 填完路费 现在算利润 填g 把i城市生产的产品送到城市j卖
for i in range(1,n+1):for j in range(1,n+1):
g[i][j] = s[j] - p[i] - f[i][j]
# 求全图的最大利润
max_g = 0
for i in range(1,n+1):# 在第二层循环中作一个判断是否有交易的依据
max_s = -1for j in range(1,n+1):
max_s = max(max_s,g[i][j])
max_g += max(0, max_s) * a[i] # 乘上产品数量
print(max_g)
4.3.2 Dijkstra
用于处理单源最短路,从一个点出发到一个点的最短路,不可以存在负权边。
# n点m边 有向图
# 从皇宫到每个建筑的最短路径是多少 -- 单源最短路
from queue import PriorityQueue
import math
INF = math.inf
# dijkstra ,s:起点
def dijkstra(s):# 求从起点s出发到各个点i的最短路径# d[i]表示从起点s出发到点i的最短的最短路径
d = [INF]*(n+1)# vis[i]表示第i个点是否出队列
vis = [0]*(n+1)# 创建优先队列
q = PriorityQueue()# 起点初始化距离0
d[s] = 0# 起点入队列
q.put((d[s],s))# 当队列非空while q.queue:
dis,u = q.get()# 每个点只有第一次出队列有效if vis[u]:continue
vis[u] = 1# 松弛 找离当前点在连通状态下的最近点for v,w in G[u]:if d[v] > d[u] + w:
d[v] = d[u] + w
q.put((d[v],v))# 处理完成d数组后按题目要求不通的距离为视为-1 for i in range(n+1):if d[i] == INF:
d[i] = -1print(*d[1:],sep=' ')n,m = map(int,input().split())
# 存图
G = [[] for i in range(n+1)]
for _ in range(m):
u,v,w = map(int,input().split())
G[u].append([v,w])
dijkstra(1)
相关文章:
图论2图的应用补充
图论1基础内容-CSDN博客 图的应用 4.1 拓扑排序 拓扑排序针对有向无环图的顶点进行线性排列的算法,使得对于任何来自顶点A指向顶点B的边,A都在序列中出现在B之前。这样的排序存在于有向无环图中,而对于非有向无环图则不存在拓扑排序。 拓扑排…...
非线性模型预测控制(NMPC)算法及其Python实现
目录 非线性模型预测控制(NMPC)算法及其Python实现第一部分:NMPC算法概述1.1 NMPC的定义1.2 NMPC的优点1.3 NMPC的应用领域第二部分:NMPC算法的数学模型2.1 系统建模2.2 目标函数与约束2.3 NMPC算法的求解第三部分:NMPC算法的实现与优化3.1 实现步骤3.2 Python实现3.3 设计…...
sql语句分类
SQL语句分类 SQL,英文全称为Structured Query Language,中文意思是结构化查询语言(属于编程语言的一种) DDL数据定义语⾔ Data Definition Language,数据定义语言,例如修改数据库中的表、视图、索引等对…...
<一>51单片机环境
目录 1,51单片机开发语言是C,环境keil 1.1,工程创建 1.2用什么把代码放进单片机里面 2,初识代码 1,51单片机开发语言是C,环境keil 1.1,工程创建 1. 创建项目工程文件夹,可以当作模板Template 2. 创建文件,取名main.c 3,编译,选择输出文…...
flutter 解决webview加载重定向h5页面 返回重复加载问题
long time no see. 如果觉得该方案helps,点个赞,评论打个call,这是我前进的动力~ 通常写法: 项目里用的webview_flutter 正常webview处理返回事件 if (await controller.canGoBack()) {controller.goBack(); } else {Navigator…...
折腾基本功:Redis 从入门到 Docker 部署
前面写过了两篇 “Redis” 相关的内容,今天补一篇“基本功”内容,让后续折腾系列文章可以篇幅更短、内容更专注。 前言 在日常工作中,我们构建应用时总是离不开一些基础组件,Redis 就是其中特别常用的一个。之前我写过不少文章&…...
【C++习题】24.二分查找算法_0~n-1中缺失的数字
文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: 剑指 Offer 53 - II. 0~n-1中缺失的数字 题目描述: 解法 哈希表: 建立一个hash表看哪个数字出现次数为0 直接遍历找结果࿱…...
分享一款内存马检测工具(附网盘链接)
DuckMemoryScan DuckMemoryScan是一款简单寻找包括不限于iis劫持,无文件木马,shellcode免杀后门的工具 功能列表 HWBP hook检测 检测线程中所有疑似被hwbp隐形挂钩内存免杀shellcode检测可疑进程检测(主要针对有逃避性质的进程[如过期签名与多各可执行区段])无文件落地木马检…...
vscode ctrl+/注释不了css
方式一.全部禁用插件排查问题. 方式二.打开首选项的json文件,注释掉setting.json,排查是哪一行配置有问题. 我的最终问题:需要将 "*.vue": "vue",改成"*.vue": "html", "files.associations": { // "*.vue": &qu…...
python数据分析之爬虫基础:爬虫介绍以及urllib详解
前言 在数据分析中,爬虫有着很大作用,可以自动爬取网页中提取的大量的数据,比如从电商网站手机商品信息,为市场分析提供数据基础。也可以补充数据集、检测动态变化等一系列作用。可以说在数据分析中有着相当大的作用!…...
洛谷 P1036 [NOIP2002 普及组] 选数 C语言
题目:https://www.luogu.com.cn/problem/P1036 题目描述 已知 nn 个整数 x1,x2,⋯ ,xn,以及 1 个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n4,k3,4 个…...
CSS动画案例4
目录 一、介绍二、基础布局1. HTML2.CSS 三、交互效果1.设置中间图片的动画2.设置左右两侧每行内容的起始位置与动画3.设置左右两侧第二行与第三行的动画延时的时间4.icon划入时的效果 四、结束语 一、介绍 今天我们继续来看下一个CSS动画案例,这个案例主要是图片以…...
华为云云连接+squid进行正向代理上网冲浪
1 概述 Squid是一个高性能的代理缓存服务器,主要用于缓冲Internet数据。它支持多种协议,包括FTP、gopher、HTTPS和HTTP。Squid通过一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求,这使得它在处理请求时具有较高的效率。…...
【C++】封装红黑树实现的map和set
前言 这篇博客我们将上篇博客实现的红黑树来封装成自己实现的set和map,来模拟一下库里的map和set 💓 个人主页:小张同学zkf ⏩ 文章专栏:C 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 1.源…...
【SSM】mybatis的增删改查
目录 代理Dao方式的增删改查 1. 创建项目 $$1. 在sql.xml里增加日志代码以及user的mapper资源。 $$ 2. 在usermapper里引入接口。 $$3. 在测试类中引入以下代码,并修改其中名字。 $$ 4. 实例对象User.java里属性要与表中列严格对应。 2. 查询 1>. 查询所有 …...
macos下brew安装redis
首先确保已安装brew,接下来搜索资源,在终端输入如下命令: brew search redis 演示如下: 如上看到有redis资源,下面进行安装,执行下面的命令: brew install redis 演示效果如下: …...
鸿蒙修饰符
文章目录 一、引言1.1 什么是修饰符1.2 修饰符在鸿蒙开发中的重要性1.3 修饰符的作用机制 二、UI装饰类修饰符2.1 Styles修饰符2.1.1 基本概念和使用场景2.1.2 使用示例2.1.3 最佳实践 2.2 Extend修饰符2.2.1 基本概念2.2.2 使用示例2.2.3 Extend vs Styles 对比2.2.4 使用建议…...
【Linux】Linux2.6内核进程调度队列与调度原理
目录 一、进程管理中的部分概念二、寄存器三、进程切换四、Linux2.6内核进程调度队列与调度原理结尾 一、进程管理中的部分概念 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务&#…...
MacOS使用VSCode编写C++程序如何配置clang编译环境
前言 这段时间在练习写C和Python,用vscode这个开发工具,调试的时候遇到一些麻烦,浪费了很多时间,因此整理了这个文档。将详细的细节描述清楚,避免与我遇到同样问题的人踩坑。 1.开发环境的配置 vscode的开发环境配置…...
【Spark源码分析】规则框架- `analysis`分析阶段使用的规则
analysis分析阶段使用的规则 规则批策略规则说明SubstitutionfixedPointOptimizeUpdateFields该规则优化了 UpdateFields 表达式链,因此看起来更像优化规则。但是,在处理深嵌套模式时,UpdateFields 表达式树可能会非常复杂,导致分…...
Windows和Ubuntu系统下cmake和opencv的安装和使用
以下是在Windows和Ubuntu系统下分别安装CMake并使用C配置OpenCV实现读取图片并显示功能的详细步骤: Windows系统 1. 安装CMake 访问CMake官方网站(https://cmake.org/download/)。根据你的Windows系统版本(32位或64位ÿ…...
详解 Qt QtPDF之QPdfPageNavigator 页面跳转
文章目录 前言头文件: 自 Qt 6.4 起继承自: 属性backAvailable : const boolcurrentLocation : const QPointFcurrentPage : const intcurrentZoom : const qrealforwardAvailable : const bool 公共函数QPdfPageNavigator(QObject *parent)virtual ~QPd…...
设计模式之单例
单例可以说是设计模式中最简单的一种模式。但任何一种设计模式都是普遍经验的总结,都有值得思考的地方。所以单例也并不简单,下面让我们慢慢了解它。 单例顾名思义这个类只有一个实例。要做到这点,需要做到以下几点: (…...
笔记软件:我来、思源笔记、Obsidian、OneNote
最近wolai的会员到期了,促使我更新了一下笔记软件。 首先,wolai作为一个笔记软件,我觉得有很多做得不错的方面(否则我也不会为它付费2年了),各种功能集成得很全(公式识别这个功能我写论文的时候…...
前端入门指南:前端模块有哪些格式?分别什么情况使用
前言 在当今的前端开发中,模块化是提升代码组织性和可维护性的关键手段。随着前端技术的发展,出现了多种模块化方案,每种方案都有其独特的优势和适用场景。本文将详细探讨常见的前端模块格式,包括全局变量、IIFE、CommonJS、AMD、…...
Vue3 常用指令解析:v-bind、v-if、v-for、v-show、v-model
Vue 是一个非常强大的前端框架,提供了许多常用指令来简化模板的使用。Vue 指令以 v- 开头,用于对 DOM 元素和组件的行为进行控制。本文将介绍 Vue 中常见的五个指令:v-bind、v-if、v-for、v-show 和 v-model,并通过实例代码来演示…...
如何查看ubuntu服务器的ssh服务是否可用
你可以通过以下几种方法检查 Ubuntu 服务器上的 SSH 服务是否可用: 1. 使用 systemctl 检查 SSH 服务状态 首先,检查 SSH 服务是否正在运行: sudo systemctl status ssh如果 SSH 服务正在运行,你会看到类似以下的输出ÿ…...
redis面试复习
1.redis是单线程还是多线程 无论什么版本工作线程就是是一个,6.x高版本出现了IO多线程 单线程满足redis的串行原子,只不过IO多线程后,把输入/输出放到更多的线程里区并行,好处: 1.执行的时间更短,更快&a…...
【人工智能基础04】线性模型
文章目录 一. 基本知识1. 线性回归1.1. 基本形式1.2. 线性回归 2. 优化方法:梯度下降法2.1. 梯度下降法的直观意义2.2. 随机梯度下降法 3. 分类问题3.1. 二分类:逻辑回归-sigmoid函数3.2. 多分类问题--softmax函数 4. 岭回归与套索回归4.1. 基础概念什么…...
使用YOLO系列txt目标检测标签的滑窗切割:批量处理图像和标签的实用工具
使用YOLO系列txt目标检测标签的滑窗切割:批量处理图像和标签的实用工具 使用YOLO的TXT目标检测标签的滑窗切割:批量处理图像和标签的实用工具背景1. 代码概述2. 滑窗切割算法原理滑窗切割步骤:示例: 3. **代码实现**1. **加载标签…...
《装甲车内气体检测“神器”:上海松柏 K-5S 电化学传感器模组详解》
《装甲车内气体检测“神器”:上海松柏 K-5S 电化学传感器模组详解》 一、引言二、K-5S 电化学传感器模组概述(一)产品简介(二)产品特点(三)产品适用场景 三、电化学传感器原理及优点(一…...
【笔记】文明、现代化与价值投资
文章目录 价值投资与理性思考资管行业特点及对从业人员的道德底线要求价值投资长期来看,各项资产的走势投资与投机 对文明的认知对文明的计量方式狩猎文明或1.0文明农业畜牧文明或2.0文明农业文明的天花板及三次冲顶农业文明中的思想革命和制度创新 科技文明或3.0文…...
排序学习整理(1)
1.排序的概念及运用 1.1概念 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作,以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…...
提升分布式系统响应速度:分布式系统远程调用性能提升之道
目录 一、远程调用直接案例分析 二、并行调用 (一)核心思想 (二)并行调用的实现方式 1. 基本思路 2. 代码示例 3. 关键点说明 4.线程池配置建议 三、数据异构 (一)场景重提 (二&…...
通过MinIO+h2non/imaginary 搭建自己的阿里云OSS
安装MinIO Docker部署MinIO对象存储服务 图片访问地址:http://192.168.153.138:9000/public/su7_1.jpg 安装h2non/imaginary Docker部署h2non/imaginary 处理图片地址:http://192.168.153.138:7000/resize?urlhttp://192.168.153.138:9000/public/su…...
.NET 9 AOT的突破 - 支持老旧Win7与XP环境
引言 随着技术的不断进步,微软的.NET 框架在每次迭代中都带来了令人惊喜的新特性。在.NET 9 版本中,一个特别引人注目的亮点是 AOT( Ahead-of-Time)支持,它允许开发人员将应用程序在编译阶段就优化为能够在老旧的 Win…...
iOS与Windows间传文件
想用数据线从 windows 手提电脑传文件入 iPhone,有点迂回。 参考 [1],要在 windows 装 Apple Devices。装完、打开、插线之后会检测到手机,界面: 点左侧栏「文件」,不是就直接可以传,而是要通过某个应用传…...
ospf协议(动态路由协议)
ospf基本概念 定义 OSPF 是典型的链路状态路由协议,是目前业内使用非常广泛的 IGP 协议之一。 目前针对 IPv4 协议使用的是 OSPF Version 2 ( RFC2328 );针对 IPv6 协议使用 OSPF Version 3 ( RFC2740 )。…...
直击高频编程考点:聚焦新版综合编程能力考查汇总
目录 一、业务性编程和广度能力考查 (一)基本定义 (二)必要性分析 二、高频考查样题(编程扩展问法) 考题1: 用java 代码实现一个死锁用例,说说怎么解决死锁问题?(高…...
爬虫框架快速入门——Scrapy
适用人群:零基础、对网络爬虫有兴趣但不知道从何开始的小白。 什么是 Scrapy? Scrapy 是一个基于 Python 的网络爬虫框架,它能帮助你快速爬取网站上的数据,并将数据保存到文件或数据库中。 特点: 高效:支…...
Springfox、Swagger 和 Springdoc
Springfox、Swagger 和 Springdoc 是用于在 Spring Boot 项目中生成 API 文档的工具,但它们之间有显著的区别和演进关系: 1. Swagger 简介 Swagger 是一个开源项目,旨在为 RESTful APIs 提供交互式文档。最早由 SmartBear 开发,…...
Css、less和Sass(SCSS)的区别详解
文章目录 Css、less和Sass(SCSS)的区别详解一、引言二、CSS 简介1.1、CSS 示例 三、Less 简介2.1、Less 特性2.2、Less 示例 四、Sass(SCSS)简介3.1、Sass 特性3.2、SCSS 示例 五、总结 Css、less和Sass(SCSSÿ…...
新能源汽车充电基础设施短板问题多,如何实现高效、综合、智能化管理?
随着城市经济的发展,人民生活水平的提升,新能源汽车保有量快速增长,而日益增长的新能源汽车需求与充电基础设施建设不平衡的矛盾日益突出。由于停车泊位充电基础设施总量不足、布局待优化、利用效率低、建设运营存在短板问题等原因࿰…...
DBA面试题-1
面临失业,整理一下面试题,找下家继续搬砖 主要参考:https://www.csdn.net/?spm1001.2101.3001.4476 略有修改 一、mysql有哪些数据类型 1, 整形 tinyint,smallint,medumint,int,bigint;分别占用1字节、2字节、3字节…...
LAN,WAN,VLAN,WLAN,VPN了解笔记
局域网LAN---公司的内部网络就是局域网LAN。 提供有线连接的接口允许局域网内的设备(如台式电脑、网络打印机、网络存储设备等)通过以太网线连接到路由器并与其他局域网设备进行通信实现设备之间的数据传输和资源共享一种私有的网络相对其他网络传输速度…...
1.2 算法和算法评价
1.2.1 算法的基本概念 算法:对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。 算法的五个重要特性 “好”的算法的五个目标 1.2.2 算法效率的度量 一、时间复杂度 算法的时间复杂度是指一个算法每行…...
各大常见编程语言应用领域
不同编程语言因其特性和设计目标而适用于不同的应用领域。以下是一些常见编程语言及其主要应用领域: 1. Python 数据科学与人工智能:Python 在数据分析、机器学习、深度学习等领域广泛使用,因其丰富的库(如 NumPy、Pandas、Tens…...
【FFT】数据点数是否一定为2的n次方?不补零会如何处理?
一般来说,FFT的数据点个数为以2为基数的整数次方(采用以2为基的FFT算法,可以提升运算性能),但是并没有要求FFT的数据点个数一定为2的n次方。 因此针对数据点数不是以2为基数的整数次方,有两种处理方法&…...
shell脚本小练习#003:查找并拷贝目录
实例1: # 从当前执行脚本的路径位置开始向上搜索一个名为sourceProject目录名 # 并将这个文件目录的路径名称打印出来#!/bin/bashfunction find_dir() {local current_dir$PWDwhile [[ $current_dir ! "/" ]]; doif [[ -d "${current_dir}/sourcePr…...
frp内网穿透
目录 1,准备公网服务器 2,下载安装frp服务端 3,服务端安装 2)编辑服务端配置文件fprs.toml 3)配置启动服务 4)启动服务 5 )设置开机启动服务 6)查看服务启动状态 3,…...