网络流乱做(水的一批)
# luogu P4313 文理分科
题意:给定一个 的网格,将网格黑白染色。每个点有被染成黑色或白色后的权值,同时也有相邻的(指有一条相同的边)的点和自己相同全都被染成黑色或白色后的权值,要求最大化权值和。
。
经典最小割模型,一个点被割到 或 表示被染成某一种颜色。每个点先和 与 连边,然后每个点再和其相邻的点连一条容量为 的边,表示永远不会被割开,然后用总权值减去最小割即可。
# CF704D Captain America
题意:二维平面上有 个点,每个点的坐标为 。每个点都要被涂为红色或蓝色,价格分别为 和 。同时还有 个限制,有两种: 表示在直线 上两种颜色的点的数量之差不超过 ; 表示在直线 上两种颜色的点的数量之差不超过 。要求构造出一种涂色方案且总花费最少,或判断无法构造。
。
先对坐标离散化一下。对于二维平面上的点 ,经典做法是将 和 拆开,当成左部点和右部点,分别向 和 连边。我们先假设 ,涂红我们就可以看作 到 有流。假设一条直线上有 个点,且这条直线要求数量之差为 ,那么这条直线上红点的数量在 之间(解个方程就能得到),即流量有上下界,且要求红点的数量尽可能多,那么我们直接跑一个有源汇有上下界最大流,就能得到红点的数量,剩下的就是蓝点,至此费用就算出来了。对于构造方案,我们遍历每个点对应的那一条边,若它被流过(即反向边上有流量),说明被涂成了红色,否则蓝色。
无解的情况也好判断,一是有某条直线,其上界比下界还大;或者有源汇有上下界最大流本身无解。
# luogu P2071 座位安排
题意:有 个人和 个座位,每个座位只能坐 人,且每个人都有自己想坐的座位,问最多多少人可以做到自己想坐的座位。
。
裸题。将人和座位匹配, 向座位连容量是 的边,每个人向 连容量为 的边,每个座位向对应的人连容量为 的边,然后跑最大流即可。
# luogu P4043 [AHOI2014/JSOI2014] 支线剧情
题意:给定一个 个点的 有边权。从 号点出发,到达一个点可以选择继续走,也可以选择直接回到 号点重新开始,这个操作不需要代价。求要经过所有边的最小边权和。
。
考虑每条边的边权可以看成走这条边的费用,走的次数就可以看成流量,所以直接建图。 向 号点连边,因为每条边都要至少走一次,所以考虑上下界网络流,将其下界设为 ,上界为 。同时因为可以从除 以外的任意点结束,所以将除 以外的点向 连边,然后跑有源汇有上下界最小费用可行流。与上下界可行流类似,只需要最后算上每条边费用乘下界即可。
# CF843E Maximum Flow
题意:给定一个网络流图,每条边的容量未知,同时有一个隐藏的最大流方案。每条边有 ,若 表示这条边无流量流过,若 表示有流量。要求最小化满流的边的数量,同时输出这种条件下每条边的流量与容量。
。
考虑到最小割上的边一定是满流的,所以我们要求边数最少的最小割。对于 ,我们连边 ,因为这条边没有流,就一定能从 走到 ,那么它们就不能割掉。对于 ,因为这条边有流量,所以其反向边一定有流量。同理,若没有满流,那么 可以到 。若满流,就可以加入到最小割中。所以我们连边 。然后我们跑一个 到 的最小割即可。
然后我们考虑怎么构造方案。对于 的边,其流量就有了下界 ,那我们跑上下界可行流即可。对于 的边,其容量可设为 ,流量为 。对于 的边,最终这条边的流量就是得到的可行流(记得加下界 )。同时若这条边在最小割中,其容量要与流量相等,表示满流。否则容量设为 即可。