网络流杂题

luogu P4313 文理分科

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

n,m<=100


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

CF704D Captain America

​ 题意:二维平面上有 n 个点,每个点的坐标为 (xi,yi) 。每个点都要被涂为红色或蓝色,价格分别为 rb

。同时还有 m 个限制,有两种:1ld 表示在直线 x=l 上两种颜色的点的数量之差不超过 d2ld 表示在直线 y=l 上两种颜色的点的数量之差不超过 d。要求构造出一种涂色方案且总花费最少,或判断无法构造。

n,m<=1e5xi,yi<=1e9


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

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

luogu P2071 座位安排

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

n<=2000


裸题。将人和座位匹配,S 向座位连容量是 1 的边,每个人向 T 连容量为 2 的边,每个座位向对应的人连容量为 1 的边,然后跑最大流即可。

luogu P4043[AHOI2014/JSOI2014]支线剧情

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

n300


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

CF843E Maximum Flow

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

2n1001m1000


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

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

posted @   YC乌龙  阅读(89)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示