考虑先从简单情况,即只有一个 \(s,t,l\) 的限制入手。
我们求出 \(s\) 到 \(t\) 的最短路,这条路径无论从限制角度还是从最大删边的角度都是最优的。
现在考虑两个限制。
这时,两条路径可能会有重复部分。我们用 BFS 预处理出全最短路径,然后枚举重复部分的起始点 \(u\),终止点 \(v\),检查是否满足限制,并求最大值。注意可能一条路径经过了 \(u \to v\),而另一条路径经过了 \(v \to u\);当然也可能没有重复部分。
这个做法的正确性有没有保障呢?有的。
还是刚才的思路,最短路无论从什么角度思考,都是最优的。即最优情况不可能有多段不连续的重复,要不然就不符合一开始“考虑最短路的重合部分”的思路了。
也就是,我们不考虑一定坏的情况。
时间复杂度 \(O(n^2)\)。
submission.