NO.96十六届蓝桥杯备战|图论基础-多源最短路|Floyd|Clear And Present Danger|灾后重建|无向图的最小环问题(C++)

多源最短路:即图中每对顶点间的最短路径
![[Pasted image 20250417140843.png]]

floyd算法本质是动态规划,⽤来求任意两个结点之间的最短路,也称插点法。通过不断在两点之间加⼊新的点,来更新最短路。
适⽤于任何图,不管有向⽆向,边权正负,但是最短路必须存在(也就是不存在负环)。

  1. 状态表⽰: f[k][i][j] 表⽰:仅仅经过 [1, k] 这些点,结点 i ⾛到结点 j 的最短路径的⻓度。
  2. 状态转移⽅程:
  • 第⼀种情况,不选新来的点: f[k][i][j] = f[k - 1][i][j]
  • 第⼆种情况,选择新来的点: f[k][i][j] = f[k - 1][i][k] + f[k - 1][k][j]
  1. 空间优化:只会⽤到上⼀层的状态,因此可以优化到第⼀维。
  2. 初始化:
  • f[i][i] = 0
  • f[i][j] 为初始状态下 i 到 j 的距离,如果没有边则为⽆穷。
  1. 填表顺序:
  • ⼀定要先枚举 k ,再枚举 i 和 j 。因为我们填表的时候,需要依赖的是 k - 1 层的状态,因此 k 必须先枚举。
B3647 【模板】Floyd - 洛谷
#include <bits/stdc++.h>
using namespace std;const int N = 110;int n, m;
int f[N][N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;memset(f, 0x3f, sizeof f);for (int i = 1; i <= n; i++) f[i][i] = 0;for (int i = 1; i <= m; i++){int a, b, c; cin >> a >> b >> c;f[a][b] = f[b][a] = min(f[a][b], c);}//floydfor (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)f[i][j] = min(f[i][j], f[i][k] + f[k][j]);for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++)cout << f[i][j] << " ";cout << endl;}return 0;
}
P2910 [USACO08OPEN] Clear And Present Danger S - 洛谷
#include <bits/stdc++.h>
using namespace std;typedef long long LL;const int N = 110, M = 1e4 + 10;int n, m;
int a[M];
int f[N][N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;for (int i = 1; i <= m; i++) cin >> a[i];for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)cin >> f[i][j];for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)f[i][j] = min(f[i][j], f[i][k] + f[k][j]);LL ret = 0;for (int i = 2; i <= m; i++){int x = a[i-1], y = a[i];ret += f[x][y];}cout << ret << endl;return 0;
}
P1119 灾后重建 - 洛谷

在floyd算法中,我们是⼀个点⼀个点加⼊到最短路的更新中,那么这道题其实就是限制了我们加点的时机。当从前往后遍历每次询问的时候,直到时间点在询问的时间t之前的点,都可以加⼊到最短路的更新中。
那么就可以⼀边读取询问,⼀边通过时间限制,更新最短路

#include <bits/stdc++.h>
using namespace std;const int N = 210, INF = 0x3f3f3f3f;int n, m;
int t[N];
int f[N][N];void floyd(int k)
{for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;for (int i = 0; i < n; i++) cin >> t[i];memset(f, 0x3f, sizeof f);for (int i = 0; i < n; i++) f[i][i] = 0;for (int i = 1; i <= m; i++){int a, b, c; cin >> a >> b >> c;f[a][b] = f[b][a] = min(f[a][b], c);}int Q; cin >> Q;int pos = 0;while (Q--){int a, b, c; cin >> a >> b >> c;while (pos < n && t[pos] <= c) floyd(pos++);if (t[a] > c || t[b] > c || f[a][b] == INF) cout << -1 << endl;else cout << f[a][b] << endl;}return 0;
}
P6175 无向图的最小环问题 - 洛谷

floyd算法的性质:

  • 在计算第 k 层的时候, f[i][j] ⾥⾯存储着中转点为 [1, k - 1] 时的最短路。如果设环⾥的最⼤结点的编号为 k ,与k相邻的点为 i, j ,其中 i < k && j < k && i != j
  • 那么我们在floyd算法循环到 k 的时候,这个环的最⼩⻓度为: f[i][j] + e[i][k] + e[j][k]
  • 环的最⼤编号是任意的,因此在所有情况下取最⼩值即可
#include <bits/stdc++.h>
using namespace std;const int N = 110, INF = 1e8;int n, m;
int e[N][N];
int f[N][N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;//memset(e, 0x3f, sizeof e);//memset(f, 0x3f, sizeof f);for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)f[i][j] = e[i][j] = INF;for (int i = 1; i <= n; i++) e[i][i] = f[i][i] = 0;for (int i = 1; i <= m; i++){int a, b, c; cin >> a >> b >> c;e[a][b] = e[b][a] = f[a][b] = f[b][a] = min(e[a][b], c);}int ret = INF;for (int k = 1; k <= n; k++){//最小环for (int i = 1; i < k; i++)for (int j = i+1; j < k; j++)ret = min(ret, f[i][j] + e[i][k] + e[k][j]);//最短距离for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)f[i][j] = min(f[i][j], f[i][k] + f[k][j]);}if (ret == INF) cout << "No solution." << endl;else cout << ret << endl;return 0;
}

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

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

相关文章

电流模式控制学习

电流模式控制 电流模式控制&#xff08;CMC&#xff09;是开关电源中广泛使用的一种控制策略&#xff0c;其核心思想是通过内环电流反馈和外环电压反馈共同调节占空比。相比电压模式控制&#xff0c;CMC具有更快的动态响应和更好的稳定性&#xff0c;但也存在一些固有缺点。 …

MATLAB 控制系统设计与仿真 - 36

鲁棒工具箱定义了个新的对象类ureal,可以定义在某个区间内可变的变量。 函数的调用格式为&#xff1a; p ureal(name,nominalvalue) % name为变量名,nominalValue为标称值&#xff0c;默认变化值为/-1 p ureal(name,nominalvalue,PlusMinus,plusminus) p ureal(name,nomin…

LeetCode -- Flora -- edit 2025-04-17

1.最长连续序列 128. 最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [1…

Sql刷题日志(day3)

一、笔试 1、min(date_time)&#xff1a;求最早日期 2、mysql中distinct不能与order by 连用&#xff0c;可以用group by去重 二、面试 1、SQL中如何利用replace函数统计给定重复字段在字符串中的出现次数 (length(all_string)-length(all_string,目标字符串,))/length(ta…

解决 Spring Boot 多数据源环境下事务管理器冲突问题(非Neo4j请求标记了 @Transactional 尝试启动Neo4j的事务管理器)

0. 写在前面 到底遇到了什么问题&#xff1f; 简洁版&#xff1a; 在 Oracle 与 Neo4j 共存的多数据源项目中&#xff0c;一个仅涉及 Oracle 操作的请求&#xff0c;却因为 Neo4j 连接失败而报错。根本原因是 Spring 的默认事务管理器错误地指向了 Neo4j&#xff0c;导致不相…

理解和实现RESTful API的最佳实践

理解和实现RESTful API的最佳实践 在当今数字化时代&#xff0c;APIs已成为软件开发的核心组件&#xff0c;而RESTful API以其简洁、灵活和可扩展性成为最流行的API设计风格。本文将深入探讨RESTful API的概念、特点和实施指南&#xff0c;帮助开发者构建高效、可靠的Web服务。…

大语言模型微调技术与实践:从原理到应用

大语言模型微调技术与实践&#xff1a;从原理到应用 摘要&#xff1a;随着大语言模型&#xff08;LLM&#xff09;技术的迅猛发展&#xff0c;预训练语言模型在各种自然语言处理任务中展现出强大的能力。然而&#xff0c;将这些通用的预训练模型直接应用于特定领域或任务时&am…

遨游科普:三防平板除了三防特性?还能实现什么功能?

在工业4.0浪潮席卷全球的今天&#xff0c;电子设备的功能边界正经历着革命性突破。三防平板电脑作为"危、急、特"场景的智能终端代表&#xff0c;其价值早已超越防水、防尘、防摔的基础防护属性。遨游通讯通过系统级技术创新&#xff0c;将三防平板打造为集通信中枢、…

前端实战:基于 Vue 与 QRCode 库实现动态二维码合成与下载功能

在现代 Web 应用开发中&#xff0c;二维码的应用越来越广泛&#xff0c;从电子票务到信息传递&#xff0c;它都扮演着重要角色。本文将分享如何在 Vue 项目中&#xff0c;结合QRCode库实现动态二维码的生成、与背景图合成以及图片下载功能&#xff0c;打造一个完整且实用的二维…

HAL详解

一、直通式HAL 这里使用一个案例来介绍直通式HAL&#xff0c;选择MTK的NFC HIDL 1.0为例&#xff0c;因为比较简单&#xff0c;代码量也比较小&#xff0c;其源码路径&#xff1a;vendor/hardware/interfaces/nfc/1.0/ 1、NFC HAL的定义 1&#xff09;NFC HAL数据类型 通常定…

Vue自定义指令-防抖节流

Vue2版本 // 防抖 // <el-button v-debounce"[reset,click,300]" ></el-button> // <el-button v-debounce"[reset]" ></el-button> Vue.directive(debounce, { inserted: function (el, binding) { let [fn, event "cl…

AI知识补全(十六):A2A - 谷歌开源的agent通信协议是什么?

名人说&#xff1a;一笑出门去&#xff0c;千里落花风。——辛弃疾《水调歌头我饮不须劝》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;AI知识补全&#xff08;十五&#xff09;&#xff1a;AI可解…

【机器人创新创业应需明确产品定位与方向指南】

机器人领域的创新创业, 需要对公司和产品的定位和生态进行深入思考, 明确其定位与发展目标, 明确产品在是为G、为B还是为C进行服务。 本文引用地址&#xff1a;https://www.eepw.com.cn/article/202504/469401.htm 超前的、探索性的创新技术一般是面向G端, 而不是面向B端或者C…

网安加·百家讲坛 | 刘志诚:AI安全风险与未来展望

作者简介&#xff1a;刘志诚&#xff0c;乐信集团信息安全中心总监、OWASP广东区域负责人、网安加社区特聘专家。专注于企业数字化过程中网络空间安全风险治理&#xff0c;对大数据、人工智能、区块链等新技术在金融风险治理领域的应用&#xff0c;以及新技术带来的技术风险治理…

TOA与AOA联合定位的高精度算法,三维、4个基站的情况,MATLAB例程,附完整代码

本代码实现了三维空间内目标的高精度定位,结合到达角(AOA) 和到达时间(TOA) 两种测量方法,通过4个基站的协同观测,利用最小二乘法解算目标位置。代码支持噪声模拟、误差分析及三维可视化,适用于无人机导航、室内定位等场景。订阅专栏后可获得完整代码 文章目录 运行结果…

2025MathorcupC题 音频文件的高质量读写与去噪优化 保姆级教程讲解|模型讲解

2025Mathorcup数学建模挑战赛&#xff08;妈妈杯&#xff09;C题保姆级分析完整思路代码数据教学 C题&#xff1a;音频文件的高质量读写与去噪优化 随着数字媒体技术的迅速发展&#xff0c;音频处理成为信息时代的关键技术之一。在日常生活中&#xff0c;从录音设备捕捉的原始…

Deno Dep:颠覆传统的模块化未来

一、重新定义依赖管理&#xff1a;Deno Dep 的革新哲学 Deno Dep&#xff08;原Deno包管理器&#xff09;彻底重构了JavaScript/TypeScript的依赖管理方式&#xff0c;其核心突破体现在&#xff1a; 1. 浏览器优先的模块化&#xff08;URL-Centric Modules&#xff09; // 直…

欧拉系统升级openssh 9.7p1

开发的系统准备上线&#xff0c;甲方对欧拉服务器进行了扫描&#xff0c;发现openssh版本为8.2p1&#xff0c;存在漏洞&#xff0c;因此需要升级openssh至9.7p1。欧拉系统版本为20.03 SP3。 1、下载openssh 9.7p1 https://www.openssh.com/releasenotes.html&#xff0c; 将下…

如何精通C++编程?

如果从学生时代算起的话&#xff0c;我学习和使用C已经差不多快十年了&#xff0c;仍然不敢说自己已经掌握了C的全部特性&#xff0c;但或许能够给出一些有用的建议吧。 我学习C全靠自学&#xff0c;花费了不少的功夫&#xff0c;在这里分享一些学习心得&#xff0c;希望对大家…

提高Qt工作线程的运行速度

1. 使用线程池&#xff08;QThreadPool&#xff09;替代单一线程 做过&#xff0c;但是当时没想到。。。 目的&#xff1a;减少线程创建和销毁的开销&#xff0c;复用线程资源。 实现步骤&#xff1a; 创建自定义任务类&#xff1a;继承QRunnable&#xff0c;实现run()方法。…