网络流(1)

A.奇怪的游戏

  处理网格图常用的黑白染色,将黑白格看成左部点和右部点,之间连边即可。

  若$n*m$为偶数,那么答案具有单调性,可以直接二分答案,若当前二分出来的值最大流=应该操作的次数,那么这个值是可行的。

  对于奇数的情况,黑白格权值之和的差不变,所以合法权值最多只有一个,解方程求出来,$check$一下就行了。

B.士兵占领

  将"某一行至少选k个"转化为全选之后,每一行最多删掉若干个,列同理。

  没有限制的格子行列之间进行连边,限制流量,之后最大流就是最多能删掉多少个,用所有格子减去最大流就是答案。

C.紧急疏散

  因为答案显然具有单调性,所以直接二分答案。

  因为数据范围很小,可以考虑将每个门拆成时间个,每个向汇点连流量为一的边,就可以完成对门的限制。

  对于某个空地,连向所有它能走到的门,跑最大流即可。

  然而这样是边数$O(n^5)$,(虽然能过)。然后每个门向上一个时间的门连边,每个空地只向对应时间的门连边即可。

D.狼抓兔子

  直接跑网络流就可以过,正解是平面图转对偶图,平面图中的一个割对应对偶图中一条路径,因此只要求出对偶图中源点到汇点的最短路即可。

E.切糕

  如果没有任何限制,一个显然的建图方法是将每一列建成从源到汇的一条通路,最小割就是答案。

  如果有了限制,那么只需要使得割掉两个不合法的点使得S->T仍然联通即可,所以每一个点(x,y,z)向周围的列的(i,j,z-d)连边即可保证这一点。

F.Figure Eight

  

G.最大获利

  典型的最小割模型,表现为若i,j同时选,那么获得一些收益。

  连边方法:新建一个点k,i->k连inf,j->k连inf,k->T连k的收益,S向所有的中转站连对应花费的边。由于保证了对于任意一个收益,要么同时选择两个中转站,要么放弃这个收益,所以是正确的。用总收益减去最小割就是答案。

  这道题其实可以只建n个点,具体和人员雇佣非常像,下面说。

H.happiness

  同样是最小割的模型,对于某个同学,S向同学连文科收益的边,向T连理科收益的边,相邻同学共同收益仍然可以转化为最大获利的模型,建边类似。

  这道题似乎有更好的做法,然而我不会。

I.employ人员雇佣

  对于每个经理,S向他连雇佣费用的边,表示选。

  对于某个经理i,若不选,那么他对于其他经理造成的所有贡献都会损失,所以向T连流量为$sum e_{i,j}$的边,表示损失。

  与前面两道题不同的是,若两个经理一个选一个不选,那么还要损失一定收益,所以只要让割掉其中一个经理之后仍然联通即可,对于收益$E_{i,j}$,只要从i向j连一条流量为$2*E_{i,j}$的边,表示原来j对i造成的贡献拿不到,还要损失。

J.不同的最小割

  似乎是一种叫做最小割树的数据结构的模板题。

  一张n个点的图中最多只有n-1种本质不同的最小割,并且形成了树状结构,并不会证。

  于是就可以用类似分治的方法,在当前集合中任取两点作为源和汇,求出最小割,最小割将原集合分成了两部分,继续向下递归这个过程即可。

K.晨跑

  费用流模板题。

L.80人环游世界

  是一道上下界费用流模板题,然而当时并不会,所以想到了和skyh一样的神奇的方法。

  首先流量只能限制人数和经过次数的其中一个,考虑使用某种技巧使得不合法的解一定不优。

  用流量限制人数,对于经过次数的限制,进行拆点,经过一个点的费用设为-inf,就可以保证费用最小的时候必然会将经过次数全部用完,由于经过的总次数是一定的,最后在费用流求出来的答案上直接加上inf*经过总次数即可。

  似乎很多上下界的题目都可以这样水过去,比如星际竞速和支线剧情,对于一条流量限制为$[a,b]$的边,前a次经过费用减去inf,后面$b-a$次为原费用就可以保证合法。然而这样很容易建出负环,然而很多题都保证了无环,并不知道为什么。

  顺便谴责skyh乱diss行为。

M.修车

  正序不好考虑,考虑倒序,那么若第i位修车师傅修的倒数第k辆车所花时间为c,那么代价为c*k。

  于是费用流跑一遍就可以了。

N.数字配对

  这题和千钧一发类似,都是通过构造二分图保证了合法。

  合法的数对分解质因数之后质因子个数最多差1,所以可以根据质因子个数的奇偶构建二分图。

  跑费用流就行了。

O.美食节

  和修车类似,然而复杂度不能接受,显然每个厨师在做完倒数第一道菜的时候才会去做倒数第二道菜,所以动态建边即可。

原文地址:https://www.cnblogs.com/hzoi-cbx/p/12008899.html