今天做了一天的网络流,也发现了很多有趣(有毒)的建图方法,也算是收获很多了,这里就做个总结吧。
网络流跑的方法大家都会我就不说了,题考察的重点也就是建图。
建图就涉及到2个方面:
1.建点。建点其实就是网络流的难点了,一般点弄好了边也容易了。建点的困难就在于有时要拆点,我总结了一下拆点主要是这几个作用:
a、控制点的通过次数,就是把点的次数用边的流量来限制。
b、化点权为边权。
c、一个点可能会有影响答案的多个状态或情况时要拆,按情况数拆,拆开后每一个代表一种情况。
d、一层一层的拆,用来限制某些条件。
2.连边,这个如果点弄对了,就直接按状态的转移来连就好了,一般比较容易。
几个基础模型:
1.DAG图最小路径覆盖
2.分层图最短路径(上文拆点的d情况)
3.二分图匹配
4.各种不相交路径(上文拆点的a情况)
想练网络流的可以试试《经典的网络流24题》,我反正是全部刷完了,里面的模型都很好,我博客里也有一些我觉得好的题的思路和自己写的代码可供参考.