LG2685 TJOI2012 桥(最短路,set / multiset)
求每条边删去以后 \(s\) 到 \(t\) 的最短路。
拎出一条 \(s\) 到 \(t\) 的最短路 \(p\)。
对每个点 \(u\),求出 \(s \to u\) 与 \(s \to t\) 最短路的最后一个共同点 \(L_u\),以及 \(t \to u\) 和 \(t \to s\) 的最后一个共同点 \(R_u\)。
\(L, R\) 可以在最短路数上依次以 \(p\) 中的点为起点 bfs 求出。
然后对于一条不在 \(p\) 的边,\([L_u, R_v)\) 之间的边对应的集合中加入 \(f(s \to u) + w + f(v \to t)\)。
求出每个集合的最小值可以扫描线。
然后最后 \(d\) 就是删除 \(p\) 中每条边的最大值。
如果 \(d\) 等于原来的最短路,答案是 \(m\)(这里错了好多发),否则是等于 \(d\) 的集合最小值个数。

浙公网安备 33010602011771号