acwing算法提高之图论--floyd算法及其扩展应用

目录

  • 1 介绍
  • 2 训练

1 介绍

本专题介绍使用floyd算法求解的题目。

使用floyd算法,可以求解如下问题:

  1. 最短路。
  2. 传递闭包。
  3. 找图中的距离总和最小的环路。
  4. 求恰好经过k条边的最短路。

floyd算法的原理讲解:基于动态规划。

状态表示d[k,i,j]:(1)集合:所有从i出发,最终走到j,且中间只经过结点编号不超过k的所有路径。(2)属性:路径长度的最小值。

状态计算:(1)所有不含结点k的路径,即d[k-1,i,j]。(2)所有包含结点k的路径,即d[k-1,i,k] + d[k-1,k,j]

状态转移为:d[k,i,j] = min(d[k-1,i,j], d[k-1,i,k] + d[k-1,k,j])

考虑优化掉第一维状态之后,有,

for (int k = 0; k < n; ++k) {for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {d[i][j] = min(d[i][j], d[i][k] + d[k][j]);}}
}

2 训练

题目1:1125牛的旅行

C++代码如下,

#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>#define x first
#define y secondusing namespace std;typedef pair<double, double> PDD;const int N = 155;
const double INF = 1e20;int n;
PDD q[N];
double d[N][N];
double maxd[N];
char g[N][N];double get_dist(PDD a, PDD b) {double dx = a.x - b.x;double dy = a.y - b.y;return sqrt(dx * dx + dy * dy);
}int main() {cin >> n;for (int i = 0; i < n; ++i) cin >> q[i].x >> q[i].y;for (int i = 0; i < n; ++i) cin >> g[i];for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {if (i == j) d[i][j] = 0;else if (g[i][j] == '1') d[i][j] = get_dist(q[i], q[j]);else d[i][j] = INF;}}for (int k = 0; k < n; ++k) {for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {d[i][j] = min(d[i][j], d[i][k] + d[k][j]);}}}double r1 = 0;for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {if (d[i][j] < INF) {maxd[i] = max(maxd[i], d[i][j]);}}r1 = max(r1, maxd[i]);}double r2 = INF;for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {if (d[i][j] >= INF) {r2 = min(r2, maxd[i] + maxd[j] + get_dist(q[i], q[j]));}}}printf("%.6lf\n", max(r1, r2));return 0;
}

题目2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx配置代理kibana

一、编辑kibana配置文件&#xff0c;修改server.basePath 配置文件中这行默认是注释掉的&#xff0c;我们取消注释并修改保存 server.basePath: "/elk" 二、重启kibana&#xff0c;root启动记得跟allow参数 nohup ./kibana --allow-root & 三、配置nginx代理…

Vision-Language Models for Vision Tasks: A Survey

论文地址&#xff1a;https://arxiv.org/pdf/2304.00685.pdf 项目地址&#xff1a;https://github.com/jingyi0000/VLM_survey 一、综述动机 视觉语言模型&#xff0c;如CLIP&#xff0c;以其独特的训练方式显著简化了视觉识别任务的流程。它减少了对大量精细标注数据的依赖&a…

Python selenium 使用Chrome 禁止弹出保存密码弹窗

chrome_optionwebdriver.ChromeOptions()#禁用“保存密码”弹出窗口 chrome_option.add_experimental_option("prefs",{"credentials_enable_service":False,"profile.password_manager_enabled":False})driverwebdriver.Chrome(optionschrome_o…

小组分享内容

目录 1.网络爬虫的作用&#xff08;人话&#xff09;&#xff1a; 2.使用的工具 3.不使用程序进行网页信息的获取的操作步骤 4.如何使用程序来进行上述操作 1.打开浏览器 2.输入网址 3.发送请求 4.获取响应 5.判断响应是否成功 6.获取响应里需要的内容 7.记得最后关…

2_3.Linux系统中的日志管理

# 1.journald # 服务名称&#xff1a;systemd-journald.service journalctl 默认日志存放路径&#xff1a; /run/log &#xff08;1&#xff09; journalctl命令的用法 journalctl -n 3 ##日志的最新3条--since "2020-05-01 11:00:00" ##显示11&#xff1a;00后的日…

基于STM32的汽车防窒息系统

文章目录 基于STM32的汽车防窒息系统系统简介材料展示视频制作硬件连接原理图PCB实物图GSM模块使用GSM模块代码 SGP30模块SGP30模块代码 步进电机驱动步进电机代码 其他模块主逻辑代码 总结 基于STM32的汽车防窒息系统 系统简介 随着社会的发展目前汽车的流行&#xff0c;汽车大…

GPT带我学-设计模式11-组合模式

设计模式类型 结构型设计模式 使用场景 将对象组合成树状结构来表现"部分-整体"的层次结构。这种模式能够使得客户端对单个对象和组合对象的使用具有一致性。这句话太抽象了&#xff0c;拿一个实际的网站菜单树例子来说。 例子&#xff1a;网页菜单树 一个网站的…

C++经典面试题目(十八)

1、请解释虚函数表的概念&#xff0c;并说明其在多态中的应用。 虚函数表&#xff08;Vtable&#xff09;是用于实现多态的一种机制&#xff0c;它是一个存储虚函数地址的表。每个含有虚函数的类都会有一个对应的虚函数表&#xff0c;其中存放着该类的虚函数的地址。当对象被创…

【CSS】伪元素

伪元素 常见的伪元素 ::first-line::first-letter::before 在元素第一个子元素前增加内容::after 在元素最后一个子元素后增加内容 为了区分伪类和伪元素&#xff0c;建议伪元素都使用2个冒号::first-line可以针对首行文本设置属性::first-letter可以针首字母设置属性::before…

【技巧】如何解除Excel“打开密码”?

给Excel表格设置“打开密码”&#xff0c;可以保护表格不被他人随意打开&#xff0c;那如果后续不需要保护了&#xff0c;不想每次打开Excel都需要输密码&#xff0c;要怎么去除“打开密码”呢&#xff1f; 今天分享3个方法&#xff0c;最后一个方法记得收藏起来&#xff0c;以…

基于51单片机的智能报警系统Proteus仿真

地址&#xff1a;https://pan.baidu.com/s/10dhkyV5O629UpFHHV67LpQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectroni…

源码|并发一枝花之CopyOnWriteArrayList

CopyOnWriteArrayList的设计思想非常简单&#xff0c;但在设计层面有一些小问题需要注意。 JDK版本&#xff1a;oracle java 1.8.0_102 本来不想写的&#xff0c;但是github上CopyOnWriteArrayList的code results也有165k&#xff0c;为了流量还是写一写吧。 实现 看两个方法你…

LVS、HAProxy

集群&#xff1a;将很多个机器组织到一起&#xff0c;作为一个整体对外提供服务。集群在扩展性、性能方面都可以做到很灵活。集群的分类&#xff1a;负载均衡集群&#xff1a;Load Balance。高可用集群&#xff1a;High Available。高性能集群&#xff1a;High Performance Com…

Python学习从0到1 day20 第二阶段 面向对象 ② 封装

缘分 朝生暮死犹如露水 —— 24.4.1 学习目标&#xff1a; 1.理解封装的概念 2.掌握私有成员的使用 一、面向对象三大特性&#xff1a; 面向对象编程&#xff0c;是许多编程语言都支持的一种编程思想 简单理解是&#xff1a;基于模板&#xff08;类&#xff09;去创建实体&…

请解释一下Velocity模板引擎的基本工作原理是什么?在Velocity中,如何定义和使用变量?

请解释一下Velocity模板引擎的基本工作原理是什么&#xff1f; Velocity模板引擎的基本工作原理可以概括为将数据模型与模板文件相结合&#xff0c;通过解析模板中的指令和占位符&#xff0c;将数据模型的内容填充到模板中&#xff0c;最终生成所需的文本输出。 具体来说&…

一个基于大数据的派单管理系统

通常需要处理大量的订单数据&#xff0c;并确保这些数据能够在各个相关部门之间高效、准确地传递。这样的系统不仅有助于提高派单效率&#xff0c;还能优化资源配置&#xff0c;减少不必要的浪费。以下是一个包含所需元素的系统设计方案概述&#xff1a; 数据结构 订单号&…

枚举---算法

1、定义 枚举算法&#xff1a;也称之为穷举算法&#xff0c;这种算法就是在解决问题的时候去使用所有的方式去解决这个问题&#xff0c;会通过推理去考虑事件发生的每一种可能&#xff0c;最后推导出结果。优点&#xff1a;简单粗暴&#xff0c;它暴力的枚举所有可能&#xff…

Mysql故障和优化

一、MySQL故障 二、MySQL优化 1.硬件优化&#xff1a; 2.数据库设计与规划 1.提前估计数据量&#xff0c;使用什么存储引擎 2.数据库服务器专机专用&#xff0c;避免额外的服务可能导致的性能下降和不稳定性 3.增加多台服务器&#xff0c;以达到稳定、高效的效果。主从同步、…

Flask Response生成流式数据api;iter_lines,iter_content遍历区别

1、Flask Response生成流式数据api 注意return与def generate():是同级的 from flask import Flask, Responseapp Flask(__name__)app.route(/stream) def stream_data():def generate():for i in range(5):time.sleep(1)yield f"Data chunk {i}\0" # 在每个数据…

风控系统:通过净值及盈亏开启和关闭自动交易

一、风控对交易员的好处 帮助交易员执行交易纪律并保护他们的交易资金。 纪律风控&#xff1a;对不符合交易纪律的交易执行风控&#xff0c;对交易纪律性差的交易员执行约束操作。净值风控&#xff1a;对满足条件的净值执行风控&#xff0c;防止交易员的账户净值过度下降。手数…