其他分享
首页 > 其他分享> > 最短路2 动点spfa

最短路2 动点spfa

作者:互联网

流程

按照一定的顺序逐一将边加入图,用 spfa 维护图的动态 \(dis\)。当然最短路是广义的,可以是瓶颈路等。
具体来说,每次加边就把边的两端加到 queue 中,不清空 \(dis\),跑一遍 spfa。
由于是按照一定顺序加边的,可以钦定当前加入的边是极值,所以该算法常用于解决用两个属性定义的最短路

例题

【eg1】[NOI2014]魔法森林

按照 \(a\) 从小到大加入边,假定当前加入的边是路径上最大的 \(a\),跑一遍 spfa 求 \(b\) 的瓶颈路(最小的路径上最大值),用 \(maxa+maxb\) 更新答案。
注:虽然现实中路径不一定经过当前边,但是不妨这样假设,因为如果不经过,那么在加入之前的边的时候这个答案已经更新了 ans 了。

【eg2】[HAOI2006]旅行

按照权值从小到大加入边,假定当前加入的边是路径上最大值,跑一遍 spfa 求瓶颈路(最大的路径上最小值),用 \(max\div min\) 更新答案。
当然没有学过动点spfa时更好想的思路显然是跑 kruskal 最小生成树(which is a 瓶颈树),然后固定最小值min找删掉<min的树边后 s~t 的最大值,是 \(O(m^2\alpha)\) 的。

标签:动点,加入,瓶颈,短路,路径,spfa,min
来源: https://www.cnblogs.com/impyl/p/16461805.html