最短路树/图

P2685 [TJOI2012] 桥

首先求出一个最短路树,显然只能删除树上的边才对答案有影响。

最短路树有很多,任意求一个可以吗?可以,因为删除一条边后就可以走另一个最短路树了。

枚举删除哪一条边并不好计算。考虑最后我们最短路一定是 \(1\to l_x\to x\to y\to r_y\to n\) 的样子,所以我们考虑枚举不在最短路树上的边 \((x,y)\),找到最短路树上对应的 \((l_x,r_x)\),更新答案。

最后查询单点最小值即可。

如何预处理 \(l,r\) 数组?按照一定的顺序加入最短路中的每个点,每次都 bfs 更新所有点即可,由于每个点只会更新一次,故复杂度均摊线性。


[ABC375G] Road Blocked 2

建出最短路图。

一种方法是对最短路方案计算,考虑一条边是否有 \(c1_x\times c2_y = c(1,n)\),由于需要取模估计需要调参。

另外一种方法就是判断最短路图上这条边是否为割边。


奥运公交

建出最短路树,对于所有树上的边暴力重新跑一边 dijkstra。否则可以直接用 \(dis(1, x)\)\(dis(n, y)\)

复杂度应该是把暴力的 \(O(m^2\log m)\) 变成了 \(O(nm\log m)\)

posted @ 2024-10-17 16:48  LCat90  阅读(14)  评论(0编辑  收藏  举报