思路
题意可得我们要求一个网络流的最小割。但由于dinic时间复杂度是O(EV^2),显然对于这张图来说边数会达到10^6以上,所以dinic的时间复杂度是不满足我们的要求的。所以我们学习一个O(nlogn)的姿势——网络流最小割转对偶图最短路。对偶图的概念摸这里。通过观察我们能发现对偶图中的环即对应着原图的割,但直接用对偶图环的性质我们并没有什么高效的算法。所以我们在建图过程中稍作修改,我们这样对样例建图:
我们先在左上角的源点和右下角的汇点连一条线,如上图,然后再建对偶图。这时比较对偶图的性质显然可以知道对偶图中0到1的最短路即为最小割,运用spfa或dijkstra堆优化就能做到O(nlogn)。
代码
1 |
|