网络流一句话题解

题目过多,小题直接说,大题单独代码。

P1231 教辅的组成

由于一本书只能选一次,所以需要拆点,限制流量$1$,跑个最大流即可。

P2764 最小路径覆盖问题

考虑每个点之间的合并可以少一条路径=点数-最大流(最多合并的路径数)。($u\rightarrow v$即)$Edge(u,v+n)$ ,即试图让一个条路径表示为一个点之间的合并。

P2774 方格取数问题

考虑总数值-相邻的。考虑$(i+j) \mod 2$分成个二分图。对于相邻的就是只能在两个值中取一个,连边之后,即是最小割

P1361 小 M 的作物

最小割模版题,总收益-只能选择一种的收益,可以建立虚点把需要一起的搞在一起,然后最小割即可。

CF311E Biologist

有收益有亏损,直接当作全亏,然后总的+亏本-最小割。

P3159 [CQOI2012]交换棋子

以记录黑色棋子的起始和终结位置,想办法去让棋子从起始位置走到终止位置,一一匹配。保证交互次数拆两个点,但是发现头尾交换次数为$1$,中间为$2$,拆成$3$个点$l,m,r$,这样就可以分摊费用了。注意如果$1->1,0->0$。显然会发生偶次数,可以分解。如果$1->0$,那么进入的那边一定会出去那边大$1$的交换次数,$0->1$ 反之。

CF1045A Last chance

裸的线段树建图,跑个最大流即可。

P2153 [SDOI2009]晨跑

拆个点,最大流显然是可以跑几次,最短路程显然是最小费用流

CF277E Binary Tree on Plane

显然树上点看成$i->j$这样子的话,就显然分成入点和出点,然后只能$(s,i)$流量为$2$,$(i,t)$为$1$,限制下,然后路径就是权值,跑个最小费用流即可

P3358 最长k可重区间集问题

板子题,注意区间需要开闭合。则为了限制,有$k$个区间覆盖,则$[l,r)$流量为$1$,但是路径$(i,i+1)$流量为$k$表示分配流量可以为$k$,然后到了拐角,显然就需要分配流量,然后再回来的时候$r$处恢复流量,跑个最大费用流

P3357 最长k可重线段集问题

能产生影响的是线段是可以垂直于x轴的,这样就很麻烦。我们采用拆点的策略解决这个问题,扩大两倍分成入点和出点,解决事情。