网络流乱做(水的一批)

# luogu P4313 文理分科

题意:给定一个 nmn \cdot m 的网格,将网格黑白染色。每个点有被染成黑色或白色后的权值,同时也有相邻的(指有一条相同的边)的点和自己相同全都被染成黑色或白色后的权值,要求最大化权值和。

n,m100n,m\le100


经典最小割模型,一个点被割到 SSTT 表示被染成某一种颜色。每个点先和 SSTT 连边,然后每个点再和其相邻的点连一条容量为 INFINF 的边,表示永远不会被割开,然后用总权值减去最小割即可。

# CF704D Captain America

题意:二维平面上有 nn 个点,每个点的坐标为 (xi,yi)(x_i,y_i) 。每个点都要被涂为红色或蓝色,价格分别为 rrbb 。同时还有 mm 个限制,有两种:1ld1 \,l \,d 表示在直线 x=lx=l 上两种颜色的点的数量之差不超过 dd2ld2 \, l\,d 表示在直线 y=ly=l 上两种颜色的点的数量之差不超过 dd。要求构造出一种涂色方案且总花费最少,或判断无法构造。

n,m1e5xi,yi1e9n,m\le1e5 \;\; x_i,y_i\le1e9


先对坐标离散化一下。对于二维平面上的点 (xi,yi)(x_i,y_i) ,经典做法是将 xxyy 拆开,当成左部点和右部点,分别向 SSTT 连边。我们先假设 r<=br<=b ,涂红我们就可以看作 xxyy 有流。假设一条直线上有 aa 个点,且这条直线要求数量之差为 dd,那么这条直线上红点的数量在 [max(0,ad2),min(a,a+d2)][\,max(0,\lceil{\frac{a-d}{2}}\rceil)\;,\;min(a,\lfloor{\frac{a+d}{2}}\rfloor)\,] 之间(解个方程就能得到),即流量有上下界,且要求红点的数量尽可能多,那么我们直接跑一个有源汇有上下界最大流,就能得到红点的数量,剩下的就是蓝点,至此费用就算出来了。对于构造方案,我们遍历每个点对应的那一条边,若它被流过(即反向边上有流量),说明被涂成了红色,否则蓝色。

无解的情况也好判断,一是有某条直线,其上界比下界还大;或者有源汇有上下界最大流本身无解。

# luogu P2071 座位安排

题意:有 2n2n 个人和 nn 个座位,每个座位只能坐 22 人,且每个人都有自己想坐的座位,问最多多少人可以做到自己想坐的座位。

n2000n\le2000


裸题。将人和座位匹配,SS 向座位连容量是 11 的边,每个人向 TT 连容量为 22 的边,每个座位向对应的人连容量为 11 的边,然后跑最大流即可。

# luogu P4043 [AHOI2014/JSOI2014] 支线剧情

题意:给定一个 nn 个点的 DAGDAG 有边权。从 11 号点出发,到达一个点可以选择继续走,也可以选择直接回到 11 号点重新开始,这个操作不需要代价。求要经过所有边的最小边权和。

n300n\le 300


考虑每条边的边权可以看成走这条边的费用,走的次数就可以看成流量,所以直接建图。SS11 号点连边,因为每条边都要至少走一次,所以考虑上下界网络流,将其下界设为 11,上界为 INFINF 。同时因为可以从除 11 以外的任意点结束,所以将除 11 以外的点向 TT 连边,然后跑有源汇有上下界最小费用可行流。与上下界可行流类似,只需要最后算上每条边费用乘下界即可。

# CF843E Maximum Flow

题意:给定一个网络流图,每条边的容量未知,同时有一个隐藏的最大流方案。每条边有 gig_i ,若 gi=0g_i=0 表示这条边无流量流过,若 gi=1g_i=1 表示有流量。要求最小化满流的边的数量,同时输出这种条件下每条边的流量与容量。

2n1001m10002\le n\le 100\;\; 1\le m\le 1000


考虑到最小割上的边一定是满流的,所以我们要求边数最少的最小割。对于 gi=0g_i=0 ,我们连边 (u,v,INF)(u,v,INF) ,因为这条边没有流,就一定能从 uu 走到 vv ,那么它们就不能割掉。对于 gi=1g_i=1 ,因为这条边有流量,所以其反向边一定有流量。同理,若没有满流,那么 uu 可以到 vv 。若满流,就可以加入到最小割中。所以我们连边 (u,v,1),(v,u,INF)(u,v,1),(v,u,INF) 。然后我们跑一个 SSTT 的最小割即可。

然后我们考虑怎么构造方案。对于 gi=1g_i=1 的边,其流量就有了下界 11 ,那我们跑上下界可行流即可。对于 gi=0g_i=0 的边,其容量可设为 INFINF ,流量为 00 。对于 gi=1g_i=1 的边,最终这条边的流量就是得到的可行流(记得加下界 11 )。同时若这条边在最小割中,其容量要与流量相等,表示满流。否则容量设为 INFINF 即可。

更新于

请我喝[茶]~( ̄▽ ̄)~*

YC乌龙 微信支付

微信支付

YC乌龙 支付宝

支付宝

YC乌龙 贝宝

贝宝