网络流解题思路技巧

本文将简要总结网络流的各种解题思路等。并不断更新完善。

题型

从题目本身来看大致有三种:

  • 与匹配相关的一些基础模型:如最大匹配,最大独立集,最小点覆盖等。
  • 各种宏观分配问题:给定一些限制,问怎样最优。且无论按什么顺序怎样贪心都有点问题。
  • 一些序列问题,可以巧妙地用网络流解决。

从网络流的作用来看有三种:

  • 最大流 直接问最多有多少人、多少个。
  • 最小割 有许多限制,比如某些组合中最多选一个的最优解。
  • 费用流 在固定限制条件下求最优解。比如队伍人数限定m个。

当然还有许多奇技淫巧,非常诡异的思路和建图方法。

模型

分配问题的建图大致如下:

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

视具体情况有许多不同的变种

注意事项

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