2022/5/22周专题总结

前言:本周主要是对最短路径问题进行专题练习。


这个专题A题的数量比较多,感觉可能是思路比较固定,就求最短路径的算法,对于大部分的题目往往是求单源最短路径,这类问题往往使用dij或者spfa算法。floyd算法在我看来首先就是代码量比较小,能处理一对儿顶点的最短路,但代码量的代价是O(n^3)的时间复杂度,在处理一些数据量比较小的题可以直接使用,但是数据范围稍微大一点,就要去想dij或者优化floyd。

在A的过程中,碰到了负权的问题,这时dij由于dij算法都是将目前的额最短路添加到集合中,这也就保证了,下一次的最短路径是肯定要长于之前添加进去的最短路径的,然而在有负权边的时候,这个推论就会被打破,最后会导致整个dij算法崩溃,无法实现最短路径的求解。

上课只讲了spfa算法,但是在看大佬题解的过程中发现Bellman Ford这个算法,这个算法的思路与spfa算法其实很相似,就是对所有边做松弛操作,一直松弛边数减一次,得到的一定是最短路径,或者出现负环。而spfa算法在我看来就是对ford的一种优化,spfa可以保证每一次的松弛操作都在最短路径中上一个松弛成功过的节点上,与BF算法一样在松弛边数减一次后就可以判断出是否出现环。当然如果不是在题目中有提到数据出现负环尽量不要使用spfa(除非思路清晰一路绿灯),因为题目可能出现精心设计过的数据导致退化时间复杂度爆表。。

在写题意的时候,第一句话往往都是“给定一个XX图”,在处理这一类问题的过程中,构图是第一位的,注意一下数据范围,如果小一点可以直接尝试邻接矩阵用floyd,背模版套算法,没A。。很好,开始看题目是否是单源想dij,因为在A前几道的题总是用前向星存图,也就对这种存图方法有了一定惯性,总是想用前向星,这样有时候就会忽视更加易懂的动态数组存图方式,一般存完图之后我会开始往dij方向去考虑,在整个专题中有关dij的模版题感觉有很多,题解中低ms的题解很多也是dij加堆的维护实现。

在模版题之中也不乏有思维的跳跃,就比如P1938 USACO09NOV这道题就给我印象很深,因为它求最长路,可以通过边权取反之后求最短路,由于边权为负利用spfa解决,是一个很好的思路。


最后,在新的一周将要开启贪心专题,在这个专题里主要以看博客为主,自己总结好题以及题解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值