网络流题目合集

P3163

题目链接

一个 simple 的想法是直接建出原图,然后由源点向两个起点连边权为 \(2a,2b\) 的边,两个终点向汇点连边权为 \(2a,2b\) 的边 ,检查是否满流。但是这样可能会有一些混乱的流量,例如 \(s\rightarrow a_1\rightarrow b_2\rightarrow t\)

考虑交换 \(b_1,b_2\),然后再次跑最大流检查是否满流。我们可以证明,两次满流即为充要条件。

Prove:对于第一次跑最大流,假设上文中混乱的流量为 \(x\),那么此时有 \(a_1\rightarrow b_2\) 的流量为 \(x\)\(b_1\rightarrow b_2\) 的流量为 \(b-x\)\(b_1\rightarrow a_2\) 的流量也为 \(x\)\(a_1\rightarrow a_2\) 的流量为 \(a-x\)。对于第二次跑最大流,注意到此时流量均没有改变,那么此时有 \(a_1\rightarrow a_2\) 的流量为 \(a-x\)\(b_2\rightarrow b_1\) 的流量为 \(b-x\),那么此时有 \(a_1\rightarrow b_1\) 的流量为 \(x\)\(b_2\rightarrow a_2\) 的流量为 \(x\)。那么对于第一种方案,我们可以将 \(a_1\rightarrow b_2\)\(a_1\rightarrow b_1\) 的流量叠加为 \(b_1\rightarrow b_2\),另一种情况同理。

注意到叠加后每条边容量依旧合理,叠加时处理正反流量即可构造方案。

CF1404E

题目链接

网络流好题。

我们首先考虑覆盖矩形的本质,其实相当于选一些边界删掉,使得删掉后剩下的所有连通块均为长或宽为一的矩形。

更进一步的考虑,这相当于每个点的上下边界和左右边界不能同时删掉,只能任选一组或不选,容易发现将删除限制看成边的话构成了一个二分图,两边点集分别为上下和左右边界所代表的点集。

最小割的感觉就来了。这是一个经典问题,将每个点的边界视为一个点,每次删掉一个点都会让答案减一,有若干个限制,分别为两个点不能同时删掉,且我们知道这些删除限制构成了一个二分图,那么直接由源点向上下边界代表的点集连边,左右边界向汇点代表的点集建边,此时的最小割即为保留的点数。答案即为总边界数减去最小割数。

注意这个答案并不是最终答案,而是最多减少的矩形数,所以最后要拿黑色格子数减去上面的答案。

P4313

题目链接

第一个条件是简单的,仿照上题的处理方法,对每个人视为一个点 \(i\),然后 \(s\)\(i\) 连流量为 \(art_i\)\(i\)\(t\) 连 流量为 \(sci_i\) 的边即可,那么此时跑完最小割后,连在 \(s\) 上的点是选文,否则为理。

现在考虑周围一圈怎么处理。对于每个点 \(i\) 新建虚点,然后把所有有影响的点以 \(+\infty\) 的边权连到虚点上,再把虚点向汇点连上边权为 \(ssci_i\)。那么此时想要完成最小割,要么断掉所有点向原点的连边,要么断掉虚点向汇点的连边,分别对应了有人选文和均选理的两种情况。\(sart_i\) 同理处理。

LOJ2384

题目链接

首先考虑没有 \(D\) 的限制怎么做,那么我们对于每个 \((i,j)\) 直接挑出来一个 \(v(i,j,k)\) 最小的 \((i,j,k)\) 割掉即可。这个反映到网络流上就是 \(s\)\((i,j,1)\) 连接边权为 \(+\infty\) 的边,\((i,j,k)\)\((i,j,k+1)\) 连接边权为 \(v(i,j,k)\) 的边,\((i,j,r)\)\(r\) 连边权为 \(v(i,j,r)\) 的边。最小割即为答案。

现在加上 \(D\),那我们即需要让一对距离大于 \(D\) 的点割掉后仍然联通即可,那么我们由 \((i,j,k)\)\((x±1,y,k-D),(x,y±1,k-D)\) 连边权为 \(+\infty\) 的边即可。

P4177

题目链接

首先不考虑租借怎么做,那么是裸的最大权闭合子图,每次将任务的边割掉相当于是不做该任务,将机器的边割掉相当于是买物品。现在考虑上租借,租借的意义在最大权闭合子图上相当于你可以花费一部分代价删掉一条边,那么此时割掉一条边相当于是租掉一个机器。那么把原来要求的 \(+\infty\) 边改为租借机器的费用即可。

CF1416F

题目链接

posted @ 2023-08-04 21:55  -Comρℓex-  阅读(69)  评论(0编辑  收藏  举报