重要的城市(圖論 最短路)

分析

a ≠ b的從a到B的最短路,才有重要城市。

求出最短路,才能確定重要城市。

是多源最短路,n ≤ 200,可用Floyd。

若a到b,只有一條最短路,那么 a到b的路徑上的點(除了a、b)都是重要城市,若a到b有多條最短路,某個城市有多條a到b的最短路經過,那么該城市為重要城市。

一邊求最短路,一邊求重要城市:

  • result[i][j] = 從i到j的重要城市的二進制表示,用二進制數的每一位對應一個城市,若二進制位為1,該城市是重要城市,若二進制位為0,該城市不是重要城市。
  • minDist[i][k] + minDist[k][j] < minDist[i][j],result[i][j] = (result[i][k] |?result[k][j]),從i到k再從k到j是i到j的最短路,i到k的重要城市和k到j的重要城市都是i到j的重要城市。
  • minDist[i][k] + minDist[k][j] == minDist[i][j],result[i][j] = result[i][j] & (result[i][k] | result[k][j]),此時從i到j有多條最短路,這些最短路共同經過的點是重要城市。

代碼

#include <iostream>
#include <vector>
#include <bitset>
#include <cmath>
using namespace std;typedef long long LL;const LL MVal = 1e14;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);LL n, m, u, v, w;cin >> n >> m;vector<vector<LL> > minDist(n + 1, vector<LL> (n + 1, MVal));vector<vector<bitset<210> > > result(n + 1, vector<bitset<210> > (n + 1, 0));for (LL i = 1; i <= m; ++i) {cin >> u >> v >> w;minDist[u][v] = w;minDist[v][u] = w;}for (LL i = 1; i <= n; ++i)  minDist[i][i] = 0;for (LL k = 1; k <= n; ++k) {for (LL i = 1; i <= n; ++i) {for (LL j = 1; j <= n; ++j) {if (i != j && minDist[i][k] + minDist[k][j] < minDist[i][j]) {minDist[i][j] = minDist[i][k] + minDist[k][j];result[i][j] = (result[i][k] | result[k][j]);if (result[i][j] == 0 && result[j][k] == 0)  result[i][j][k - 1] = 1;} else if (i != j && minDist[i][k] + minDist[k][j] == minDist[i][j]) {result[i][j] = (result[i][j] & (result[i][k] | result[k][j]));}}}}bitset<210> res(0);for (LL i = 1; i <= n; ++i) {for (LL j = 1; j <= n; ++j) {if (i != j)  res |= result[i][j];}}if (res == 0)  cout << "No important cities.";else {for (LL i = 0; i < n; ++i)if (res[i] == 1)  cout << (i + 1) << ' ';}return 0;
}

總結

1.多源最短路且邊權不等,且O(n^3)不會TLE,用Floyd。

2.轉化為二進制可減少空間和時間,若數據范圍太大不能用整數表示,可用bitset。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84914.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

50種3D效果演示(OpenGL)

效果&#xff1a; 一、只需打開命令行&#xff08;Windows 可用 cmd&#xff09;&#xff0c;輸入&#xff1a; pip install PyQt5 PyOpenGL numpy二、用命令行進入保存 .py 文件的目錄&#xff0c;運行&#xff1a; python openGL_3d_demo.py三、建立python文件命名openGL_3…

Java大模型開發入門 (6/15):對話的靈魂 - 深入理解LangChain4j中的模型、提示和解析器

前言 在上一篇文章中&#xff0c;我們見證了AiService注解的驚人威力。僅僅通過定義一個Java接口&#xff0c;我們就實現了一個功能完備的AI聊天服務。這感覺就像魔法一樣&#xff01; 但作為專業的工程師&#xff0c;我們知道“任何足夠先進的技術&#xff0c;都與魔法無異”…

用Rust如何構建高性能爬蟲

習慣了使用Python來寫爬蟲&#xff0c;如果使用Rust需要有哪些考量&#xff1f; 根據我了解的Rust 在性能、資源效率和并發處理方面完勝 Python&#xff0c;但是 Python 在開發速度和生態成熟度上占優。所以說&#xff0c;具體用那種模式&#xff0c;結合你項目特點做個詳細的…

CentOS7報錯:Cannot find a valid baseurl for repo: base/7/x86_64

這個錯誤通常出現在 CentOS/RHEL 7 系統中&#xff0c;當你嘗試運行 yum update 或 yum install 時&#xff0c;系統無法連接到默認的軟件倉庫&#xff08;repository&#xff09;。 可能的原因 網絡連接問題&#xff1a;系統無法訪問互聯網或倉庫服務器。錯誤的倉庫配置&…

云平臺|Linux部分指令

目錄 云平臺 操作系統&#xff08;鏡像&#xff09; 管理應用實例 遠程連接 遠程連接工具 linux相關命令&#xff08;重點&#xff09; 云平臺 1、阿里云&#xff08;學生免費&#xff0c;不包流量 流量0.8---1G&#xff09; 2、騰訊云&#xff08;搶&#xff09; 3、華…

AI首次自主發現人工生命

轉&#xff1a; 近日&#xff0c;人工智能領域迎來了一項革命性的突破。Transformer 論文作者之一的 Llion Jones 與前谷歌研究人員 David Ha 共同創立的人工智能公司 Sakana AI&#xff0c;聯合MIT、OpenAI、瑞士AI實驗室IDSIA等機構的研究人員&#xff0c;共同提出了一種名為…

Day.31

變量類型&#xff1a; name: str "Alice" age: int 30 height: float 1.75 is_student: bool False 注解&#xff1a; def add(a: int, b: int) -> int: return a b def greet(name: str) -> None: print(f"Hello, {name}") 定義矩形類&a…

光譜數據分析的方法有哪些?

光譜數據分析是通過特征光譜識別物質結構與成分的核心技術&#xff0c;其標準化流程如下&#xff1a; ?一、數據預處理?&#xff08;消除干擾噪聲&#xff09; ?去噪平滑? Savitzky-Golay濾波&#xff1a;保留光譜特征峰形&#xff0c;消除高頻噪聲。 移動平均法&#…

RabbitMQ的使用--Spring AMQP(更新中)

1.首先是創建項目 在一個父工程 mq_demo 的基礎上建立兩個子模塊&#xff0c;生產者模塊publisher&#xff0c;消費者模塊 consumer 創建項目&#xff1a; 建立成功&#xff1a; 刪除多余文件 創建子模塊1&#xff1a;publisher&#xff08;生產者模塊&#xff09; 右鍵---…

DAY 31 文件的規范拆分和寫法

浙大疏錦行 今日的示例代碼包含2個部分 notebook文件夾內的ipynb文件&#xff0c;介紹下今天的思路項目文件夾中其他部分&#xff1a;拆分后的信貸項目&#xff0c;學習下如何拆分的&#xff0c;未來你看到的很多大項目都是類似的拆分方法 知識點回顧 規范的文件命名規范的文件…

EtherCAT至TCP/IP異構網絡互聯:施耐德M580 PLC對接倍福CX5140解決方案

一、項目背景與需求 某智能工廠致力于打造高度自動化的生產流水線&#xff0c;其中部分核心設備采用EtherCAT協議進行通信&#xff0c;以實現高速、高精度的控制&#xff0c;例如基于EtherCAT總線的倍福&#xff08;Beckhoff&#xff09;CX5140PLC&#xff0c;它能夠快速響應設…

[學習] FIR多項濾波器的數學原理詳解:從多相分解到高效實現(完整仿真代碼)

FIR多項濾波器的數學原理詳解&#xff1a;從多相分解到高效實現 文章目錄 FIR多項濾波器的數學原理詳解&#xff1a;從多相分解到高效實現引言一、FIR濾波器基礎與多相分解原理1.1 FIR濾波器數學模型1.2 多相分解的數學推導1.3 多相分解的物理意義 二、插值應用中的數學原理2.1…

Java并發編程實戰 Day 22:高性能無鎖編程技術

【Java并發編程實戰 Day 22】高性能無鎖編程技術 文章簡述 在高并發場景下&#xff0c;傳統的鎖機制&#xff08;如synchronized、ReentrantLock&#xff09;雖然能夠保證線程安全&#xff0c;但在高競爭環境下容易引發性能瓶頸。本文深入探討無鎖編程技術&#xff0c;重點介紹…

打破語言壁壘!DHTMLX Gantt 與 Scheduler 文檔正式上線中文等多語言版本!

你還在為英文技術文檔望而卻步嗎&#xff1f;現在好消息來了&#xff01;DHTMLX 團隊宣布&#xff0c;其兩款明星組件——DHTMLX Gantt&#xff08;甘特圖&#xff09;與 DHTMLX Scheduler&#xff08;日程排程器&#xff09;的官方文檔&#xff0c;現已全面支持中文、德語、韓…

無監督 vs 有監督的本質區別

一、無監督 vs 有監督的本質區別 1. 無監督學習 定義&#xff1a;數據中沒有人為標注的 “正確答案”&#xff08;如類別標簽、目標值&#xff09;&#xff0c;模型需自己發現數據中的模式。任務目標&#xff1a;學習數據的分布規律、結構或生成邏輯。例子&#xff1a; 文本續…

【Linux】初見,進程概念

前言&#xff1a; 上文我們講到了Linux下的第一個程序&#xff1a;進度條 【Linux】LInux下第一個程序&#xff1a;進度條-CSDN博客 本文我們來講一講Linux中下一個非常重要的東西&#xff1a;進程 1.馮諾依曼體系結構 我們所見的大部分計算機都是遵循的馮諾依曼體系結構…

Linux進程間通信(IPC)詳解:從入門到理解

引言 作為一名C開發初學者&#xff0c;理解Linux下的進程間通信&#xff08;Inter-Process Communication&#xff0c;簡稱IPC&#xff09;機制是非常重要的一步。本文將用通俗易懂的語言&#xff0c;配合直觀的圖示&#xff0c;幫助你理解Linux進程間通信的基本概念和各種實現…

SQL進階之旅 Day 27:存儲過程與函數高級應用

【SQL進階之旅 Day 27】存儲過程與函數高級應用 文章簡述 在數據庫開發中&#xff0c;存儲過程和函數是實現復雜業務邏輯、提高代碼復用性和提升系統性能的重要工具。本文作為“SQL進階之旅”系列的第27天&#xff0c;深入探討存儲過程與函數的高級應用&#xff0c;涵蓋其設計…

泰國零售巨頭 CJ Express 借助 SAP 內存數據庫實現高效數據管理

泰國 CJ Express 運用 SAP 內存數據庫有效控制數據增長案例 “Datavard Outboard 操作簡便、配置輕松&#xff0c;我們得以在生產系統上完成數據歸檔&#xff0c;成功將約 730GB 數據遷移至 Hadoop 集群。”——K. Jak&#xff0c;J Express 技術服務經理 關于 CJ Express …

ImageSharp.Web 使用指南:高效處理ASP.NET Core中的圖像

文章目錄 前言一、ImageSharp.Web簡介二、安裝與配置1. 安裝NuGet包2. 基本配置3. 高級配置 三、核心功能與使用示例1. 基本圖像處理2. 處理模式詳解3. 自定義處理命令 四、緩存策略1. 物理文件系統緩存2. 分布式緩存3. 自定義緩存 五、性能優化建議六、常見問題解決1. 圖像處理…