网络流24题
本篇博文大多数全部都是口胡
孤岛营救问题
将每一个点转换成为\(2^{14}\)种状态,之后暴力bfs即可
飞行员配对方案问题
明显的一个二分图匹配问题
如果是直接匈牙利,就没有这么多的问题
如果是网络流的话,看每一条边是不是满流
建一个超级原点和超级汇点即可
软件补丁问题
跟孤岛营救一样的办法,将每一个点拆成\(2^n\)个点,表示当前的错误状态数,
之后用\(dij\)硬跑最短路即可
负载平衡问题
每个点的最终状态是一定的,所以我们可以很方便的得知每一个点最终会丢失货物或者得到货物
如果是丢失货物,那么就让超级原点连一条\((INF,0)\)的边(流量&费用),
如果是得到货物,那么就让这个点向超级汇点连一条\((INF,0)\)的边
之后就是货物在仓库中的运送,只需要向\((i-1)和(i+1)\)连一条\((INF,1)\)的边,跑最小费用最大流流,因为只有最大流才能保证所有的仓库都满足条件
最长k可重区间集问题
分析一下问题,最关键的条件在于一个点只能被\(k\)条边覆盖,
细想,我们并不关心线段的状态,只关心一个点的状态,
先考虑被\(k\)条边覆盖,我们可以从原点连一条边,流量限制为\(k\),
之后再从这个点连向一条边,流量为\(1\),那么问题就来了,一条边如果不满流怎么办?
那么就换成从边入手,由超级原点流向边,再由边连向\(l\),再由 \(l\)连向\(l+1\),最后从\(r\)出来,连向超级汇点,流量限制为\(1\),这样可以保证一定会让所有被线段覆盖到的点都由流量,考虑到一个点最多被覆盖\(k\)次,所以点和点之间的连边的流量限制为\(k\),这样就可以满足每一个点最多覆盖\(k\)次的条件,
然后就是长度的问题,长度的问题可以转换为费用,原点连向边,费用为\(len\),流量为\(1\),其他边的费用自然就是\(0\),最后跑一个最大费用最大流
分配问题
最容易想到的是匹配问题,除非你能用KM直接秒掉
那么之后就是效益的问题,在边上增加权值就行了
然后就是最小费用最大流和最大费用最大流
方格取数问题
正向不行反向来搞
选出的数和最大=所有数的和-未选出的数的和
因为这里天生就已经分出了两个集合(选出和为选出),也许可以尝试将题目向割上面转换
首先考虑题目中的限制条件,很容易就可以将点分成两类,横纵坐标奇偶性相同和横纵坐标奇偶性不同,因为每一类的内部都不可能互相限制,相同的称之为\(A\),不同的称之为\(B\)
那么我们考虑的是,怎么让一条边没被删除,与之相关联(即不能选)的边一定被删除
那么就从\(S\)连到\(A\),\(B\)连到\(T\),流量限制均为方格的权值,之后因为有一些点选了另一些点既不能选,那么就连一条\(INF\)的边,这些边因为权值是\(INF\),故不可能被割掉,如果两条边都不删除,那么就不满足割的性质,所以两条边必有一条边会被删除
汽车加油行驶问题
经典的插点问题
将每一个点拆成\(K\)个点,表示汽车到这的时候还剩下多少油
然后你就可以dij了
如果从网络流的角度来考虑,每一条边的流量均为\(1\),因为不可能经过一条边(单向)两次
费用?分成三类,
坐标减小,这个直接将边附上费用即可
遇到油库,向可以达到的\((v,K-1)\)这些点连向边即可,同时要将原来的可以不加油过的边删去,因为是强制消费
建油库,每个点(包含所有状态)建一个虚点就好了,流量\(1\),费用\(C+A\)
之后就是最小费用最大流,注意应该要建一个超级原点和一个超级汇点,超级原点连向\((1,1)\),\((N,N)\)连向超级汇点,流量限制均为\(1\),因为只走一条路,费用当然是\(0\)
运输问题
简单的一道费用流的题目
货物数量的限制就是原点到这个点流量的限制,需要货物的限制就是这个点到汇点的流量限制,这两种边当然费用是\(0\)
之后仓库向商店连边\((INF,c_{ij})\),跑最小费用最大流即可(因为只有在最大流的情况下才能满足所有的需要)
太空飞行计划问题
考虑到有正有负不好处理,那么我们将其全部转换为正
首先,答案的上界是知道的,也就是所有的实验的资助
然后我们所需要的就是减去的资助+实验器材的费用最小,尝试向最小割上面转换
因为实验和实验所对应的器材不能同时存在与同一个集合中,所以是非此即彼的关系,从\(S\)连向所有实验,流量为实验的赞助,实验连向器材,流量为\(INF\),器材流向\(T\),流量为器材的价格,之后跑一个最大流就可以求出最小的减少费用