《路径》

时间:2022-3-20    作者:老大夫    分类: 蓝桥C++


本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。

小蓝的图由 2021 个结点组成,依次编号 1 至 2021。

对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。

例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点 25 之间有一条无向边,长度为 75。

请计算,结点 1 和结点 2021 之间的最短路径长度是多少。

提示:建议使用计算机编程解决问题。

题目大意

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

题目给定建图方式, ii​ 和 jj​ 的差值的绝对值小于 2121​ 的时候 ii​ 和 jj​​ 之间连接一条权值为 LCM(i,j)LCM(i,j)​ 的边,问​ 11 到 20212021 的最短路径。

LCMLCM 表示最小公倍数。

解题思路

这题建图方式告诉你了,老老实实按照题目说的方式建图,然后单源最短路 dijkstradijkstra 算法一下子就跑出来了。

由于蓝桥杯是闭卷,也就是不让带参考材料,很多人记不住 dijkstradijkstra​ 算法,或者比赛的时候一紧张写错了,导致跑出来的答案差了那么一丢丢,就很尴尬了。考虑这道题是填空题,那么不需要在规定时间内完成,那么简单好记的粗暴算法 FloydFloyd 就纳入我们的选择。

为什么说 FloydFloyd 算法粗暴,因为他用的是 DPDP 的思想,复杂度高达 O(n^3)O(n3) ,优点就是简单好写。这题 n = 2021n=2021 ,n^3n3 约等于 10 ^ {10}1010​​, 假设考场的电脑性能比较差,一秒只能跑 10^8108 ,也就是我们最多运行 100100 秒, 2 分钟不到就可以跑出最稳妥的答案。

最终答案:10266837。

版权所有:伸手党盘
文章标题:《路径》
文章链接:https://ssdpan.cn/?post=33
本站文章来源于网络搜集和原创,仅供学习使用,未经授权请勿用于任何商业用途,如有侵权及时联系删除

推荐阅读:


扫描二维码,在手机上阅读