1. 问题描述:

战争时期,前线有 n 个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。指挥部设在第一个哨所。当指挥部下达一个命令后,指挥部就派出若干个信使向与指挥部相连的哨所送信。当一个哨所接到信后,这个哨所内的信使们也以同样的方式向其他哨所送信。信在一个哨所内停留的时间可以忽略不计。直至所有 n 个哨所全部接到命令后,送信才算成功。因为准备充足,每个哨所内都安排了足够的信使(如果一个哨所与其他 k 个哨所有通信联系的话,这个哨所内至少会配备 k 个信使)。现在总指挥请你编一个程序,计算出完成整个送信过程最短需要多少时间。

输入格式

第 1 行有两个整数 n 和 m,中间用 1 个空格隔开,分别表示有 n 个哨所和 m 条通信线路。第 2 至 m+1 行:每行三个整数 i、j、k,中间用 1 个空格隔开,表示第 i 个和第 j 个哨所之间存在双向通信线路,且这条线路要花费 k 天。

输出格式

一个整数,表示完成整个送信过程的最短时间。如果不是所有的哨所都能收到信,就输出-1。

数据范围

1 ≤ n ≤ 100,
1 ≤ m ≤ 200,
1 ≤ k ≤ 1000

输入样例:

4 4
1 2 4
2 3 7
2 4 1
3 4 6

输出样例:

11
来源:https://www.acwing.com/problem/content/description/1130/

2. 思路分析:

对于图论的大部分问题,我们都需要将其抽象为具体的模型,由题目可知,每个点第一次收到信的时候都是由起点开始的最短路径到达的,所以我们需要求解出从起点到所有点的最短距离,然后在这些最短距离中取一个max就可以表示所有点收到信的最早时间,所以我们先要求解出从起点到达其余点的最短距离,然后判断从起点是否与这些点是否可达,如果不可达那么输出-1,否则求解出到达所有点的最短距离即可。因为数据范围比较小所以我们可以使用floyd算法求解出任意两点的距离,然后枚举从1到其余点的最短距离即可,使用其余的最短路径算法也是ok的。

3. 代码如下:

if __name__ == "__main__":# floyd算法n, m = map(int, input().split())INF = 10 ** 10dis = [[INF] * (n + 1) for i in range(n + 1)]for i in range(n + 1):dis[i][i] = 0for i in range(m):a, b, c = map(int, input().split())# 防止重边dis[a][b] = dis[b][a] = min(dis[a][b], c)# 最外层循环为中间点kfor k in range(1, n + 1):for i in range(1, n + 1):for j in range(1, n + 1):dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j])res = 0for i in range(1, n + 1):if dis[1][i] == INF:res = -1breakelse: res = max(res, dis[1][i])print(res)

1128 信使(floyd算法)相关推荐

  1. AcWing 1128. 信使(floyd 广播模型)

    题意: 如题. 思路: 本题实际上是一个广播模型,初始时指挥部将一条广播发出去,它会向所有与它连有边的节点传输广播,每个节点接收到信息以后又会向与各自连有边的节点发出广播,同时每个节点都是会反向广播的 ...

  2. AcWing 1128 信使【最短路】

    题目描述: 战争时期,前线有 n 个哨所,每个哨所可能会与其他若干个哨所之间有通信联系. 信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位). 指挥部设在第一个哨所. 当指挥部下达一 ...

  3. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  4. 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)

    Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...

  5. 最小环算法求解(Dijkstra算法+Floyd算法)

    方法一: #include<iostream> #include<algorithm> #include<cmath> #include<cstdio> ...

  6. HDU2544(Bellman-ford算法和Floyd算法)

    思路: 1.初始化时将起点 s 到各个顶点 v 的距离 dist(s->v) 赋值为 ∞,dist(s->s) 赋值为 0: 2.后续进⾏最多 n-1 次遍历操作 (n 为顶点个数), 对 ...

  7. 【图论专题】Floyd算法及其扩展应用

    Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...

  8. 【图论】用一道题从本质上讲清楚Floyd算法

    P1119 [灾后重建] 4 5 1 2 3 4 0 2 1 2 3 1 3 1 2 2 1 4 0 3 5 4 2 0 2 0 1 2 0 1 3 0 1 4 -1 -1 5 4 一道非常好的Flo ...

  9. 图的单源最短路径,Floyd算法(数据结构c++)

    这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了. 时间复杂度是O(N*3) 算法有点动态规划的意思,有两个数组,一个(dis ...

最新文章

  1. android 输入法 suretype,没输入法的年代,黑莓都有哪些经典键盘?
  2. 步步为营UML建模系列二、部署图(Deployment Diagram)
  3. VMM系列之使用VMM服务器构建 Hyper-V主机(2)
  4. 【CentOS 7MySQL常用操作2】,连接MySQL#180112
  5. Rhel6.0升级内核到3.0.4
  6. 电磁悬浮控制系统仿真设计
  7. 信息系统项目管理师-论文专题(二)整体管理论文写作
  8. 古登堡是垂直搜索引擎吗_网站排名,提高内容输出频率,就一定要对排名好吗?-SEO...
  9. HDU 1495(非常可乐)
  10. epoll内存计算方法:4G内存服务器epoll并发量最大能达到多少?
  11. 雷达模糊函数 matlab_全场通用 | 雷达通信电子战,专业知识服务
  12. 环信 之 注册及创建应用
  13. Java—String转化为JsonObject
  14. 网络安全职业_如何开始网络安全职业
  15. xdg在Linux中的用法,Linux实用命令之xdg-open
  16. 《joel说软件》读书笔记
  17. AliOSS上传图片
  18. Spring Data JDBC自动生成的增删改查CRUD分页、排序SQL语句非常简洁没有多余的SQL
  19. 守护进程 - Supervisor的使用
  20. 【计算机组成原理】期末复习

热门文章

  1. 小型机AIX系统巡检
  2. ssl证书到期时间查询的三种方法
  3. 新人如何适应新工作环境
  4. 华尔街日报:反思互联网泡沫
  5. 全国计算机等级一级考试中的基本操作题是如何保存提交?
  6. 界面热阻和导热系数的测量方法
  7. Qt之布局设置setLayout详解-源码剖析(下)
  8. 关于excel的vba数组介绍
  9. <map object at 0x0000026B2959DA20>如何解决
  10. LabVIEW前面板上的字体大小取决于操作系统