P3094 [USACO13DEC]Vacation Planning S

提供三种做法:

1、Floyd

由于 n200n \le 200,而弗洛伊德的复杂度是 O(n3)O(n^3),这道题需要全源最短路,而弗洛伊德是最好写的,也是最能令人理解的。还不会弗洛伊德的看这里

代码:这里

2、关于SPFA,它复活了!

众所周知,一遍全源最短路其实就相当于跑 nn 遍单源最短路,nn 是结点个数。都说 SPFA 已死,但是对于这道题,SPFA 其实也不错。有兴趣的可以去看看 SPFA和Dijkstra对比

代码:这里

3、Dijkstra

正常而言,Dijkstra 速度比 SPFA 快,我写的是堆优化,代码:这里

4、对比

最后,这三个最短路谁最快呢?

Dijkstra:O(nlogn)Dijkstra: O(n \,\,\log\,\, n)mm 是边数,nn 是顶点数。

SPFA:O(km)SPFA: O(km),最坏 O(nm)O(nm)kk 是常数。

floyd:O(n3)floyd: O(n^3)

但是对于这道题:

floyd:278msfloyd: 278ms

Dijkstra:307msDijkstra: 307ms

SPFA:137msSPFA: 137ms

提交均用 C++14 (GCC 9),无 O2\text{O2}

PS:SPFAPS: SPFAO2\text{O2} 以及各种优化已经卡进 70ms70ms,目前最优,评测记录,不过考试比赛不涉及负边权,如果是单源,首选 DijkstraDijkstraSPFASPFA 已死,并且永远也不会复活

posted @   HappyBobb  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示