最短路径专题8 交通枢纽 (Floyd求最短路 )

news2024/11/26 5:20:29

题目:

样例:

输入
4 5 2
0 1 1
0 2 5
0 3 3
1 2 2
2 3 4
0 2
输出
0 7

思路:

        由题意,绘制了该城市的地图之后,由给出的 k 个编号作为起点,求该点到各个点之间的最短距离之和最小的点是哪个,并输出该点,和该点到各个点之间的最短距离之和。

        这又是一个多起点多终点的题型,所以用 Floyd 算法非常的有效率。

代码详解如下:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <unordered_map>
#define endl '\n'
#define x first
#define y second
#define mk make_pair
#define int long long
#define NO puts("NO")
#define YES puts("YES")
#define umap unordered_map
#define INF 0x3f3f3f3f
#define All(x) (x).begin(),(x).end()
#pragma GCC optimize(3,"Ofast","inline")
#define ___G std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10,M = 500;
using PII = pair<int,int>;

int n,m,k;

int dist[M][M];	// 定义各个点之间的最短距离数组

// 初始化各个点之间的最短距离
inline void Init()
{
	memset(dist,INF,sizeof dist);
	// 自身点之间的距离是 0
	for(int i = 0;i <= n;++i)
	{
		dist[i][i] = 0;
	}
}

inline void Floyd()
{
	// 这一层是中间点
	for(int k = 0;k < n;++k)
	{
		// 这一层是 i 点
		for(int i = 0;i < n;++i)
		{
			// 这一层是 j 点
			for(int j = 0;j < n;++j)
			{
				// 更新选取最短的 i 到 j 的最短距离方案 ,即 i 到 k  ,k 再到 j
				dist[i][j] = min(dist[i][j],dist[i][k] + dist[k][j]);
			}
		}
	}
}

// 由 x 点到各个点之间的最短距离之和
inline int DistSum(int x)
{
	int sum = 0;
	for(int i = 0;i < n;++i)
	{
		sum += dist[x][i];
	}
	return sum;
}

inline void solve()
{	
	cin >> n >> m >> k;
	Init();	// 初始化最短路距离数组
	while(m--)
	{
		int a,b,c;
		cin >> a >> b >> c;
		// 记录两个点之间的最短距离,min 防止自环
		dist[a][b] = dist[b][a] = min(dist[a][b],c);
	}
	// 开始求各个点之间的最短距离
	Floyd();
	
	PII ans = {-1,-1};	// 答案城市编号,已经答案城市到各个点之间的最短距离之和
	
	while(k--)
	{
		int a;
		cin >> a;	// 获取城市编号点
		int distSum = DistSum(a);	// 求最短距离之和
		if(ans.x == -1) ans = {a,distSum};	// 记录第一个点
		else if(ans.y > distSum) ans = {a,distSum};	// 更新更短的最短距离之和的点做 交通枢纽
	}
	// 输出答案
	cout << ans.x << ' ' << ans.y << endl;
}
signed main()
{
//	freopen("a.txt", "r", stdin);
//	___G;
	int _t = 1;
//	cin >> _t;
	while (_t--)
	{
		solve();
	}

	return 0;
}

最后提交:

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

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

相关文章

分布式数据库(林子雨慕课课程)

文章目录 4. 分布式数据库HBase4.1 HBase简介4.2 HBase数据模型4.3 HBase的实现原理4.4 HBase运行机制4.5 HBase的应用方案4.6 HBase安装和编程实战 4. 分布式数据库HBase 4.1 HBase简介 HBase是BigTable的开源实现 对于网页搜索主要分为两个阶段 1.建立整个网页索引&#xf…

第八章 排序 十四、最佳归并树

目录 一、定义 二、多路最佳归并树 三、多路最佳归并树少了一个归并段 四、总结 一、定义 最佳归并树是指将若干个有序序列合并成一个有序序列的一种方式&#xff0c;使得所有合并操作的总代价最小的一棵二叉树。其中&#xff0c;代价通常指合并两个有序序列的操作次数或比…

挑选出优秀的项目管理软件,满足您的需求

Zoho Projects是很好的一个项目管理软件&#xff0c;不管是web端还是APP没有那些乱七八糟的广告&#xff0c;光是这一点&#xff0c;就让人用着很舒服。除此之外还有更多让人意想不到的惊喜&#xff0c;软件界面设置的井井有条&#xff0c;关键是软件有完全免费版的&#xff0c…

mp4视频太大怎么压缩变小?

mp4视频太大怎么压缩变小&#xff1f;确实&#xff0c;很多培训和教学都转向了线上模式&#xff0c;这使得我们需要下载或分享大量的在线教学视频。然而&#xff0c;由于MP4视频文件通常较大&#xff0c;可能会遇到无法打开或发送的问题。为了解决这个问题&#xff0c;我们可以…

WMS仓储管理系统在快消品生产企业中有哪些应用

随着企业规模的扩大和市场竞争的加剧&#xff0c;仓库管理在企业管理中的地位越来越重要。对于快消品生产企业来说&#xff0c;仓库管理更是关系到产品的质量和市场竞争力。为了提高仓库管理的效率和准确性&#xff0c;许多企业开始引入WMS仓储管理系统解决方案。 中小企业WMS系…

网络安全(黑客)——自学

前言&#xff1a; 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“…

山东济南建筑模板厂家批发之桉木芯建筑模板

济南建筑模板厂家是建筑行业中非常重要的供应商之一。建筑模板是建筑施工中必不可少的一种材料&#xff0c;用于支撑混凝土浇筑和模板安装。在选择建筑模板材料时&#xff0c;我们需要考虑各类材料的特点和优缺点&#xff0c;以及与传统的建筑木模板相比的价格、耐用性和经济效…

软件测试/测试开发丨Python文件操作 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27721 文件操作 在程序中操作文件和使用图形界面操作文件的过程基本一致&#xff0c;都要进行找到文件位置&#xff0c;打开文件&#xff0c;读写文件&am…

架构方法、模型、范式、治理

从架构方法、模型、范式、治理等四个方面介绍架构的概念和方法论、典型业务场景下的架构范式、不同架构的治理特点这3个方面的内容

ChatGPT 背后包含了哪些技术?

ChatGPT 是由OpenAI开发的一款基于GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;的人工智能语言模型。这个模型是使用多种编程语言和技术组合编写的。 首先&#xff0c;ChatGPT 使用了 Python 作为主要的编程语言。Python 是一种流行的高级编程语言&…

Vue3+TypeScript

一、Vue3带来的变化(源码&#xff09; 源码通过monorepo的形式来管理源代码 口Mono:单个 口Repo : repository仓库 口主要是将许多项目的代码存储在同一个repository中; 口这样做的目的是多个包本身相互独立&#xff0c;可以有自己的功能逻辑、单元测试等&#xff0c;同时又在…

绘制长时间尺度的古地理图(海岸线)——获取海岸线数据

绘制长尺度的古地理图&#xff08;海岸线&#xff09; 2. 重建海岸线2.1. 功能描述2.2. 功能接口2.3. 功能参数2.4. 返回值2.5. 功能示例2.5.1. 使用SETON2012模型将海岸线重建至140Ma。2.5.2. 返回一个PNG地图。2.5.3. 返回指定范围内的 png 地图 分析 本文接续计算古坐标点—…

【Java 进阶篇】HTML 语义化标签详解

HTML&#xff08;HyperText Markup Language&#xff09;是构建Web页面的标准语言。在HTML中&#xff0c;标签&#xff08;tag&#xff09;是用于定义页面结构和内容的关键元素。在构建网页时&#xff0c;了解如何正确使用HTML标签是非常重要的&#xff0c;因为它们不仅影响页面…

地磁查询网站

百度搜索经纬度查询定位&#xff0c;找到位置点坐标&#xff0c; 登录如下网站 https://www.ngdc.noaa.gov/geomag/calculators/magcalc.shtml#igrfwmm

ADuM1250 ADuM1251 模块 I2C IIC总线2500V电磁隔离 接口保护

功能说明&#xff1a; 1&#xff0c;2500V电磁隔离&#xff0c;2通道双向I2C&#xff1b; 2&#xff0c;支持电压在3到5.5V&#xff0c;最大时钟频率可达1000KHz&#xff1b; 3&#xff0c;将该隔离模块接入总线&#xff0c;可以保护主MCU引脚&#xff0c;降低I2C总线上的干…

BUUCTF [MRCTF2020]Ez_bypass1

这道题全程我都是用bp做的 拿到题目 我们查看页面源代码得到 代码审计 我们要用get传入id和gg两个参数&#xff0c;id和gg的值要求不能相等&#xff0c;但是id和gg的md5强比较必须相等 if(isset($_GET[gg])&&isset($_GET[id])) {$id$_GET[id];$gg$_GET[gg];if (md5($…

PUPANVR-UI主菜单及设置窗体框架(9)

PUPA NVR UI主菜单及设置窗体框架 在设计UI时&#xff0c;竟量把数据、控制、显示&#xff0c;分开&#xff0c;即MVC的一个模式吧&#xff01;使用MVC这样的模式思想&#xff0c;会让代码简洁不少&#xff0c;逻辑也很清析&#xff01; 具体的代码见&#xff1a; PUPANVR这个…

聊聊分布式架构05——[NIO基础]BIO到NIO的演进

目录 I/O I/O模型 BIO示例 BIO与NIO比较 NIO的三大核心 NIO核心之缓冲区 Buffer常用子类&#xff1a; Buffer常用API Buffer中的重要概念 NIO核心之通道 FileChannel 类 FileChannel常用方法 NIO核心之选择器 概述 应用 NIO非阻塞原理分析 服务端流程 客户端…

前端—— 分层模型和应用协议

1 分层模型 MAC地址 可以认为计算机专属&#xff0c;可以认为每台计算机的 MAC地址 固定不变&#xff1b; IP地址 可以认为是计算机当前的【家庭地址】&#xff0c;动态唯一&#xff0c;家庭地址变化&#xff0c;IP地址 也跟着变化&#xff1b; 举个例子&#xff0c;A 给 B 发…

SpringBoot——》更改Redis序列化方式

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…