题目给出一个有向图,要求阻挡其中的一些边,使得从1到n的最短路径变长,阻挡一条边的代价是这条边的长度。
问题其实就转化为,找到从1到n的所有最短路,并在这些路中找到能阻挡最短路的一些边且边权和最小——也就是找到最短路构成图的最小割。
找所有最短路可以贪心地去找合适的边,什么样的边(u, v)是合适的呢?从1到u,从v到n的最短距离之和等于整体最短路减去这条边权时,意味着这条边可以放在一条最短路中。我们就把它加入新图的集合。
然后对新图求最大流即可。Dinic算法,正常复杂度为$n^2m$,在求解二分图最大匹配时复杂度是$m\sqrt{n}$
1 |
|