网络流24题做题记录

1|0网络流24题做题记录

1|1前置芝士

算法:匈牙利算法,dinic,EK(zkw费用流)。

一些模型:二分图匹配,二分图最佳匹配,最大权闭合子图。

(按做题顺序记录,可能不是按难度)。

1.飞行员配对方案问题

题意:有m个外籍飞行员和nm个英国飞行员,要求两两匹配,给出一组最大匹配。

思路:裸的二分图最大匹配,直接上dinic即可。

2.圆桌问题

题意:有m个不同单位,第i个单位派出了ri个代表,餐厅共有n张餐桌,第i张餐桌可容纳ci个代表就餐,要求从同一个单位来的代表不在同一个餐桌,给出一个满足要求的代表方案,可能无解。

思路:首先是套路的源点向每个单位连容量为ri的边,每个餐桌向汇点连容量为ci的边。因为每个单位最多有一个人在坐在一张桌子上,因此每个单位向每个餐桌连容量为1的边,然后跑最大流即可。

3.试题库问题

题意:有n道题,每到题有一些属性,现在要出每种属性出ci道题,要求输出方案或判无解。

思路:裸的二分图匹配,直接dinic即可。

4.软件补丁问题

题意:有n个漏洞要修复,有m个补丁,仅当漏洞集合包含b1i,与b2i交集为空是可以使用,花费代价wi,而且可以修复f1i集合的漏洞,并新添f2i的漏洞,求修好n个漏洞的最小代价。

思路:考虑状压DP,但转移不是DAG,于是用最短路进行转移即可。

5.分配问题

题意:n件任务给n个人做,ij的时间是ci,j,求最小最大总代价。

思路:不会二分图最佳完美匹配,于是直接用费用流,源点向每个人连流量为1,代价为0的边,每个人向每件工作连流量为1,代价为ci,j的边,每件工作向汇点连流量为1,代价为0的边即可。

6.运输问题

题意:m个仓库和n个商店,每个仓库有ai件物品,每个商店要卖bi件物品,从i工厂到第j个商店每单位ci,j的代价,求总代价最大最小值。

思路:和上一题类似,就是改一下流量即可。

7.负载平衡问题

题意:环上有n个数,每次可以把一个数+x,给它旁边的数(自己定哪一个)x,代价为x,求使所有数相等的最小总代价。

思路:裸的均分糖果模型。

8.孤岛营救问题

题意:一张网格图,有些边是墙,有些边是门,需要钥匙,同时有一些网格里有钥匙,求从(0,0)(n,m)的最小时间。

思路:考虑到状态数nm2p很小,于是可以考虑直接暴力广搜。

9.最长k可重区间集问题

题意:数轴上有若干区间,要求选出一些区间,使得每个点被覆盖的次数不超过k,求区间总长度的最大值。

思路:对于每个点被覆盖的次数不超过k,最先可以想到直接由每个点向汇点连容量为k的边,区间向其覆盖的所有点连边,但是这样可能会跑出来一个区间没有向所有被覆盖的点都有流量的情况,于是把每个点向汇点连容量为k的边改成每个点向后一个点连容量为k的边,最后一个点和汇点相连,区间直接把左右端点连起来。考虑到坐标可能很大,离散化后跑最大费用最大流即可。

9.75.[NOI2008] 志愿者招募

之所以是934是因为 (致敬《哈利波特》) 这道题不是网络流24题里面的,但是和最长k可重区间集问题建模的方法类似,所以就放在一起。

题意:有n天,每天需要ai个志愿者,有m类志愿者()每类无限个,会从第si天工作到第ti天,每天ci元,求最小总费用。

思路:和上一题类似,可以理解为每一个人覆盖了一段区间,而且必须取满。不过上一题是限流,这一题是强制满流,于是就直接每个点向后一个点连ai的边。不过考虑到网络流不会处理负流量,可以转为连infai的边。于是连边方案就呼之欲出了:源点向第一天、最后一天向汇点连容量为inf,费用为0的边,每个志愿者从siti+1连容量为inf,费用为ci的边,最小费用最大流即是答案、

10.方格取数问题

题意:一张n×m网格,每个方格中都有一个正整数。现要从方格中取数,使任意两个数所在方格没有公共边,且取出的数的总和最大,请求出最大的和。

思路:首先可以把网格图看成二分图,然后问题就转化成了求二分图最大权独立集,直接用总和减去最小割即可。(有人dinic写错了调了1h,警钟敲烂)。

11.魔术球问题

题意:有n个柱子,和编号为1,2的小球,要求:只能放在柱子顶端,且放入时和前一个球的编号和为完全平方数,求最多放入多少个球。

思路:发现这个问题很类似二分图匹配,于是拆点后只要最大流为n时即可输出点数和答案。

12.太空飞行计划问题

题意:有m个实验,每个实验需要若干类仪器,不同实验可共用同一种仪器,给每个实验的收益和每种仪器的花费,求最大收益。

思路:可以发现这就是一个最大权闭合子图问题,直接套用类似思路即可,注意输出方案是依据和源点s联通的点就是选择了的点。

13.最小路径覆盖问题

题意:给出DAG,要求用最少条数的路径覆盖所有点,所有路径不交。

思路:高级结论:最少路径覆盖=总点数-二分图最大匹配数。具体证明可以考虑每次贪心地选取两个首尾相连的路径进行合并,使答案减1,这样和直接求最大匹配是对应的。于是直接求最大匹配即可。输出方案只需在dinic是记录前驱后继即可。

14.最长不下降子序列问题

题意:①求最长不下降子序列长度s;②如果每个位置最多用一次,最多可以取出多少长度等于s的不下降子序列;③如果a1,an可以用多次,求最多可以取出多少长度等于s的不同的不下降子序列。

思路:第一问可以朴素DP,求出每个点结尾的最长不下降子序列长度fi。对于第二问,我们可以发现一个性质,fx=ix一定在选出的子序列的第i位,于是我们可以先拆点,然后对于ajai,fj=fi+1(i,j)连边,最大流即是答案。对于第三问,把1n的边的边权改成inf即可。

15.航空路线问题

题意:按顺序给出n个城市,有些城市间有航道,先从1n,再从n1,要求城市不重复,求最多可以去到多少个城市。

思路:只会直接连边正反流一次然后发现不好处理每个城市只被经过一次。于是我们就用费用流,拆点后两个点间容量为1,费用为1,其他的边容量为1,费用为0,s和1、nt的边容量为2,然后跑最大费用最大流即可。输出方案的处理也还好,就是要注意处理编号问题。

16.数字梯形问题

题意:有上底为m,下底为m+n1,高为n的数字等腰梯形,要求从上面m个数出发,只能向左下或右下走,求①路径不能相交②路径可以在数字处相交③路径可以在数字处或边相交时m条路经上数字和的最大值。

思路:比较板的费用流。对于第一问,把每个点拆成两个点,中间连容量为1,费用为数字大小的边,源点向上底、下底向汇点连容量为1,费用为0的边。对于第二问,一个数字可以被曲多遍,只需把拆成的点间的边、下底和汇点的边流量设为inf即可。对于第三问,再把数字间的边流量设为inf即可。

17.深海机器人问题

题意:有n×m的网格,边上有一个数,有ki个机器人从(xi,yi)出发,只能往(n,m)移动,有si个目的地(txi,tyi),每条边上的数只能被取一次,求取到的数的和的最大值。

思路:比较板的费用流。两点间连容量为1,费用为数字大小的边,再连容量为inf,费用为0的边,最后源点向起点、终点向汇点连边,然后跑最大费用最大流即可。

18.骑士共存问题

题意:在n×n的网格上,有些格子是障碍,现在要放入一些骑士(和马一样走“日”),使得他们互不攻击,问最多放入多少个。

思路:又是一道把网格图转化成二分图的题。首先,每走一个“日”字,坐标和的奇偶性改变,于是把网格图按坐标和的奇偶性分成两部分,两部分的内部没有连边,两部分之间会有一些边,然后就相当于是要求二分图最大独立集,于是套路性地转化成总点数-最大匹配,用dinic解决即可。

19.最长k可重线段集问题

题意:平面上有n个开线段,现在要选出若干个线段,使得任意对于每条直线x=p,最多有k条线段与之相交,求选出的线段长度和的最大值。

思路:和9.最长k可重区间集问题类似,只是要处理两个线段都与x轴垂直的情况,这时只需把横纵坐标都×2,然后就可以类似处理,再跑最大费用最大流即可。

20.火星探险问题

题意:在n×m的网格上,每个点可能是障碍或石块或什么都没有,现在有k个机器人从(1,1)出发到(n,m),每个石块最多被采集一次,要求输出采集的石块最多的每个机器人移动方案。

思路:比较板的费用流,每个点拆点后直接连边,跑最大费用最大流即可。比较不好处理的是输出方案。记录一下自己做这题敲的警钟:1.t设成了n×m+1导致出现了正环;2.输入的n,m搞反了;3.输出方案时少打了"&"导致只对了一个点。

21.餐巾计划问题

题意:有n天,每天需要ri个餐巾,每购买一个新的餐巾p元,也可以洗用过的餐巾,可以花c1元用t1天洗完,也可以花c2元用t2元洗完,求最小花费。

思路:不太好直接就想出来的费用流。先拆点,对于每天的限制,由源点向ii+n向汇点连容量为inf,费用为0的边,对于每天可以新买,由源点向i+n连容量为inf,费用为p的边,对于清洗餐巾,由ii+n+c1连容量为inf,费用为t1的边,c2,t2同理,然后跑最小费用最大流即可。

22.汽车加油行驶问题

题意:1辆油箱容量为k的汽车从(0,0)(n,m),每个网格点上是0或1,1表示有加油站,规定车到加油站一定要花a的代价把油加满,0表示没有,但可以花c建一座加油站,如果行驶时xy坐标减小应支付b,出发时油箱是满的,求到终点的最小花费。

思路:考虑对汽车每种油量建分层图,然后跑最短路即可。

23.[CTSC1999]家园 / 星际转移问题

题意:k个人从地球到月球,有n个空间站和m个飞船,每个飞船按固定线路循环飞行,求让所有人都到月球的最小时间。

思路:同样是分层的思路,建图跑最大流即可。

其实还有第24题,但(可能?)好像是个假题,那就不管了,留到以后再处理吧。


__EOF__

本文作者Xttttr
本文链接https://www.cnblogs.com/Xttttr/p/17360354.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xttttr  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示