[题解] P2685 [TJOI2012]桥 思路整理

题目大意

给一张 \(n\) 个点 \(m\) 条边的图,求删去一条边后最短路长度的最大值与对应删边方案数。

思路

首先考虑,如果删去的这条边不在原图最短路上,那么新图最短路长度与原图一致。

那么为使最短路长度最大,删去的边一定是原图最短路上的边。

image

如果用黑线表示原图最短路,那么在断掉图中叉掉的边时,新图最短路会长得类似图中蓝线,也就是 \(1\) 开始沿着原图最短路走一段 - 离开原图最短路 - 回到原图最短路直到到达 \(n\)

对于原图最短路上的边依次考虑删去后的答案似乎不大好算(至少菜菜的我只会删去以后重新跑最短路),考虑每条边 \((u,v)\),用 包含它的最短路 去更新 原图最短路每条边对应的答案(新图最短路长度取min),那么答案就是原图最短路每条边答案的最大值和个数。

回到上图,图中蓝线对应的最短路长度可以表示为 \(dis_{1,u}+(u,v)+dis_{v,n}\),也就是\((u,v)\) 会对黑线未被蓝线覆盖的那段中的每条边产生这个贡献

那么为了保证能统计到答案,黑线未被蓝线覆盖的长度肯定要尽可能大,也就是蓝线离开黑线的点要尽可能靠左,回到黑线的点要尽可能靠右

对于每条边 \(i\),记 经过它的最短路 离开 原图最短路 的点为 \(L_i\),回到 原图最短路 的点为 \(R_i\)\(L\)\(R\) 可以使用 dfs求出。

那么就对于每条边 \(i(u,v)\),用 \(dis_{1,u}+(u,v)+dis_{v,n}\) 在线段树上更新 点 \(L_i\) 与点 \(R_i\) 之间的边 的答案。

posted @ 2023-02-02 19:31  shiranui  阅读(37)  评论(0编辑  收藏  举报
*/