网络流解题思路技巧
本文将简要总结网络流的各种解题思路等。并不断更新完善。
题型
从题目本身来看大致有三种:
- 与匹配相关的一些基础模型:如最大匹配,最大独立集,最小点覆盖等。
- 各种宏观分配问题:给定一些限制,问怎样最优。且无论按什么顺序怎样贪心都有点问题。
- 一些序列问题,可以巧妙地用网络流解决。
从网络流的作用来看有三种:
- 最大流 直接问最多有多少人、多少个。
- 最小割 有许多限制,比如某些组合中最多选一个的最优解。
- 费用流 在固定限制条件下求最优解。比如队伍人数限定m个。
当然还有许多奇技淫巧,非常诡异的思路和建图方法。
模型
分配问题的建图大致如下:

序列问题的模型大致如下:

视具体情况有许多不同的变种
注意事项
- 网络流算法并不是很快。常用的dinic算法复杂度在分层图上为\(O(m\sqrt{n})\),费用流的ek算法复杂度为\(O(nm)\)。所以裸的网络流最多10000,费用流差不多5000.
- 如要输出答案,直接看反向边的大小就行了。反向边的大小就是正向边的流量。
- 有关费用流负环问题:如果初始状态下没有负环存在,那么就可以直接做,不用担心进入死循环。如果初始状态下就有负环,那么就需要用更奇妙的算法解决。
- 费用流有时是无法解决二分图最大权完美匹配问题的,因为过多的边数和SPFA自带的玄学复杂度很可能会TLE。所以必须用KM算法。但在边数少的情况下费用流又更优,所以要视情况而定。

浙公网安备 33010602011771号