差分约束
hhh,这几天病毒感染,真的不敢乱溜达,干脆狂写blog算了,hhh
一般形式
差分约束题一般是给出大量的一些不等式
由上面这个不等式我们应该可以联想到最短路的不等式
因此,我们可以将差分约束化成一个最短路来求,我们的保存由远点到的可以选择的最大范围!
为什么是最大范围?
我们每一次选择的是,那么一开始我们就会选择一个从原点出发的最小范围,且没有其他路径会使她变得更小(三角形),那么这个由原点出发的长度将会是的范围,选择最大的话,就是这个范围啦。
求最长路
当求最大的范围时是最短路,已经说过了,但是如果求最小范围呢?
看一下基本形式
这个又是什么意思呢?试着把也当作两个点,那么这就是
也就是最长路的样子啦
最长路
实现最长路的办法,我们试着用最短路的办法去试
- floyd 很明显暴力枚举下面肯定是可以的,但是复杂度实在太高,放弃
- dijstra基于贪心的算法,我们最长路的贪心是做不到的,从三角形来看是很明显的,遂继续放弃
- bellman_ford差不多就是暴力对所有的边进行n-1次遍历了一条最长路最多经过次松弛,在这里最长路也是这样啊,时间复杂度的话,我们可以考虑
已经死了的spfa呀,死了不要紧我们可以优化
spfa玄学优化
- 双端队列优化,一个非常常见的优化,当边权小于队首时从队首加入,否则队尾!
- 双端慢了?没事我们可以数组模拟,强行加速!
- 啊,还是tle?淡定加容错优化,我们首先把所有边权加起来开个根号后加上一个容错值然后当当前边权小于队首边权加上容错时从队首加入,否则队尾,继续强行加速!
- 听说还是tle?emmm,等死吧
来源:CSDN
作者:为秃头而生
链接:https://blog.csdn.net/qq_42937891/article/details/104147393