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.pswp.cn/news/901900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901900.shtml
英文地址,請注明出處:http://en.pswp.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()方法。…