-----网络流-------
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
loj6002「网络流 24 题」最小路径覆盖(最小不可相交路径覆盖+输出方案)
求有向无环图的不相交最小路径覆盖。把原图的每个点V拆成Vx和Vy两个点,如果有一条有向边A->B,那么就加边Ax−>By。这样就得到了一个二分图。那么最小路径覆盖=原图的结点数-新图的最大匹配数。证明:一开始每个点都是独立的为一条路径,总共有n条不相交路径。我们每次在二分图里找一条匹配边就相当于把两条路径合成了一条路径,也就相当于路径数减少了1。所以找到了几条匹配边,路径数就减少了多少。所以有最小路原创 2017-12-08 20:55:42 · 402 阅读 · 0 评论 -
zoj2314 Reactor Cooling (无源汇的有上下界的最大流)
上界用ci表示,下界用bi表示。下界是必须流满的,那么对于每一条边,去掉下界后,其自由流为ci– bi。主要思想:每一个点流进来的流=流出去的流对于每一个点i,令Mi= sum(i点所有流进来的下界流)– sum(i点所有流出去的下界流)如果Mi大于0,代表此点必须还要流出去Mi的自由流,那么我们从源点连一条Mi的边到该点。如果Mi小于0,代表此点必须还要流进来Mi的自由流,那么我们从该点连一条Mi原创 2017-11-24 20:13:08 · 503 阅读 · 0 评论 -
loj6000 「网络流 24 题」搭配飞行员(二分图最大匹配)
求二分图最大匹配裸题。可以建图跑最大流,也可以匈牙利算法。最大流原创 2017-12-08 17:33:23 · 342 阅读 · 0 评论 -
loj6001「网络流 24 题」太空飞行计划(最大权闭合图+最小割)
让所有实验向他所需的仪器连边,那么合法的方案就是原图的一个闭合子图。因此本题就是要求最大权闭合图。 最大权闭合图的通用解法:S到正权值的点连边,容量为其权值,负权值的点到T连边,容量为其绝对值,然后原图中的边容量为+∞,ans = 所有正权和 - 最小割,闭合子图为s所在集合的点。具体证明可以参考胡伯涛的论文。 因此本题再用最大流求个最小割就解决啦~至于s集合所在的点,就是最后一次bfs还能分层原创 2017-12-08 20:03:35 · 297 阅读 · 0 评论 -
loj6003「网络流 24 题」魔术球(最小路径覆盖/打表贪心)
二分答案+最小路径覆盖。把每一根柱子看作一条路径,和为完全平方数的建边,从小数向大数建。看最少几条路径覆盖,二分答案。或者也可以直接打表发现规律,每次优先往有数的柱子上放最好。直到放不下为止。原创 2017-12-08 21:42:53 · 312 阅读 · 0 评论 -
loj6004「网络流 24 题」圆桌聚餐(最大流)
s向所有单位建边,所有餐桌向T建边,每个单位向每个餐桌建容量为1的边,跑dinic看是否满流即可。原创 2017-12-08 22:03:26 · 402 阅读 · 0 评论 -
bzoj3144 [Hnoi2013]切糕(最小割)
这个题解写的不错,有图:传送门 我们相当于有p*q个点,每个点有不同的取值,需要不同的代价,然后相邻的点取值有一些限制。我们可以把每个点拆成r+1个点,(x,y,z)->(x,y,z+1)连边,容量为a[x][y][z],s向所有的(x,y,1)连边,容量为inf,所有的(x,y,r+1)向T连边,容量为inf,不考虑高度限制的话,当前图的最小割就是答案。然后我们怎么实现高度的限制呢?(x,y,z原创 2017-12-09 11:57:07 · 259 阅读 · 0 评论 -
loj6006「网络流 24 题」试题库(最大流)
判断是否满流即可。原创 2017-12-09 15:02:48 · 256 阅读 · 0 评论 -
loj6007「网络流 24 题」方格取数(最大点权独立集+最小割)
首先把网格图按(i+j)%2黑白染色,连成二分图。则答案要求的就是此图的最大点权独立集。 二分图最大点权独立集:从图中找到权值和最大的点集,使得它们之间两两没有边。 二分图最小点权覆盖集:从图中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 其实二分图最大点权独立集是二分图最小点权覆盖集的对偶问题。即是总权值-二分图最小点权覆盖集。 那么如何求二分图最小点权覆盖集呢?我原创 2017-12-09 15:51:03 · 502 阅读 · 0 评论 -
luogu3381【模板】最小费用最大流(zkw费用流板子)
%%%xtx的代码了好久,又翻了很多文章,终于算是差不多看懂了??? 费用流问题,是建立在最大流问题基础之上的,也就是说,现在流要钱了,我们要求出最大流,可能有很多个最大流,我们还要费用最小的那个。比较直观的一个想法便是:把原来的bfs分层变成spfa等最短路算法,求出从s到t费用最小的一条路径来增广。然而这样我们就失去了Dinic的一个优势,即多路增广。因为每次我们进行增广后,最短路都不一定再满原创 2017-12-09 18:03:51 · 624 阅读 · 0 评论 -
loj6008「网络流 24 题」餐巾计划(费用流)
这个问题的主要约束条件是每天的餐巾够用,而餐巾的来源可能是最新购买,也可能是前几天送洗,今天刚刚洗好的餐巾。每天用完的餐巾可以选择送到快洗部或慢洗部,或者留到下一天再处理。 经过分析可以把每天要用的和用完的分离开处理,建模后就是二分图。二分图X集合中顶点Xi表示第i天用完的餐巾,其数量为ri,所以从S向Xi连接容量为ri的边作为限制。Y集合中每个点Yi则是第i天需要的餐巾,数量为ri,与T连接的原创 2017-12-09 21:17:36 · 443 阅读 · 0 评论 -
bzoj1834 [ZJOI2010]network 网络扩容(最大流+费用流)
第一问就是直接跑最大流。第二问在残余网络上接着建图,对于原来的每条边,再建一条边容量为inf,费用为w。原边费用为0.建立超级源点向1连边,容量为k,费用为0,跑zkw费用流就好啦原创 2017-12-09 22:01:18 · 294 阅读 · 0 评论 -
bzoj1877 [SDOI2009]晨跑(费用流)
拆点建图费用流即可。 zkw费用流好像跑的很慢???看样子明天还要学习一下spfa的怎么写orz upd:spfa的费用流这么好写???我为什么要学zkw???反正都会被卡???跳槽了跳槽了orz原创 2017-12-09 22:29:21 · 256 阅读 · 0 评论 -
bzoj1221 [HNOI2001] 软件开发(费用流)
和餐巾计划一模一样,题解:传送门 就是这道题的x天,需要+1.原创 2017-12-10 20:19:57 · 269 阅读 · 0 评论 -
bzoj2424 [HAOI2010]订货(费用流)
我可能有毒吧。一个裸题,我还读错题,要去拆点x。仓库容量限制只是限制你留到下一天的不能超过s。不是一天只能卖s的东西。。。原创 2017-12-10 20:59:26 · 259 阅读 · 0 评论 -
bzoj2245 [SDOI2011]工作安排(费用流)
我可能还是有毒。本不需要把人拆成两个点的,直接源向人建边的时候建Si+1条边不就好了xxx。所以啦,源向人建Si+1条边,容量为ti−ti−1t_i-t_{i-1},费用为Wi。工作向汇建边,容量为Ci,费用为0,人和工作之间按矩阵建边,容量为inf,费用为0.跑最小费用最大流就是答案啦原创 2017-12-10 23:03:32 · 348 阅读 · 0 评论 -
poj1273 Drainage Ditches(最大流dinic板子)
Dinic算法的核心就在于多路增广。每次bfs给残余网络分层,然后一次dfs把能增广的全都增广了。复杂度是O(n2m)O(n^2m).原创 2017-11-23 09:18:36 · 316 阅读 · 0 评论 -
bzoj2502 清理雪道(有源汇有上下界最小流)
原图中的边至少要经过一次,所以容量下界为1,上界为inf,s向所有点连边,容量为[0,inf],所有出度为0的点向t连边,容量为[0,inf]。所以就是求一个有源汇有上下界最小流。怎么求?见这里原创 2017-12-19 22:32:38 · 1047 阅读 · 0 评论 -
bzoj1066 [SCOI2007]蜥蜴(建图最大流)
把每个点拆成两个点,一个表示进入这个点,记作a,一个表示离开这个点,记作b。a->b,边权为高度,表示最多只有这么多的蜥蜴可以通过这个点。然后任意两个可以互达的石柱x,y,建边bx->ay,边权为inf,建立超级源点,向所有一开始有蜥蜴的石柱建边,边权为inf,建立超级汇点,所有可以跳出地图的点向超级汇点连边,边权为inf。然后跑dinic就好啦。原创 2017-11-23 11:27:22 · 307 阅读 · 0 评论 -
bzoj1305 [CQOI2009]dance跳舞(二分答案+最大流判是否满流)
二分答案,如何判断mid是否合法呢?我们建图,把每个点分成两个点。喜欢点称为a,不喜欢点称为b,男生x喜欢女生y,则建边xa->ya,边权为1,不喜欢则建边xb->yb,边权为1,最多只能k个不喜欢,所以建边xa->xb,边权为k,yb->ya,边权为k。然后源点向所有xa建边,边权为mid,所有ya向汇点建边,边权为mid。跑dinic求出最大流,看是否满流(即是否mid次所有人都分配成功了)。原创 2017-11-23 16:23:27 · 369 阅读 · 0 评论 -
bzoj1189 [HNOI2007]紧急疏散evacuate(二分答案+bfs+最大流判是否满流)
首先bfs处理出每个人到每个门所需的时间。然后二分答案,对于所有人能到的所有门,建边,边权为1,从源点向所有人建边,边权为1,从所有门向汇点建边,边权为mid(最多出去mid个人),dinic跑最大流看是否满流原创 2017-11-23 16:29:19 · 568 阅读 · 1 评论 -
loj6010「网络流 24 题」数字梯形(费用流)
首先原题所谓的左下和右下,是要你把那个数字梯形变成等腰的那个样子来看。。也就是(i+1,j)和(i+1,j+1)。。。然后他居然没说有没有负数。。。看数据应该是没有负数。也不会超int。那也行吧x然后我们一问一问的看: 第一问,路径不能相交,也就是说每个点只能经过一次,我们可以拆点来限制住这个条件.然后每条边只能经过一次,通过流量为1来限制。也就是说S向第一层的入点建边,最后一层的出点向T建边,容原创 2017-12-11 23:07:15 · 334 阅读 · 0 评论 -
loj6011「网络流 24 题」运输问题(费用流)
最小费用最大流/最大费用最大流。本来挺裸的。然而gg了好久。因为原来的求最长路其实有点问题?因为有负权边,所以清dis的时候不能只清-1,会出锅的。要清-inf才行。我现在可能才真正理解了最小费用最大流?每次找一条最小的边,是有可能找到带反向边的增广路的,只有这样才能保证正确性。原创 2017-12-12 10:02:52 · 463 阅读 · 0 评论 -
loj6012「网络流 24 题」分配问题(费用流)
同loj6011.传送门原创 2017-12-12 10:15:16 · 300 阅读 · 0 评论 -
12.04 Day10
T1.针老师 可以发现,对于一个确定的拓扑序可以分成三部分: 00000001111111122222222 其中1表示选择的一段 假设给每个点都设一个值col[i]=0/1/2,那么如果DAG中存在i->j的边,那么必定有co[i]<=col[j]。 于是可以网络流。类似bzoj3144的建图。 相当于分成了3层,把每个点拆成两个,建边i->i’,容量为base-w[i],s->i,容原创 2017-12-20 16:46:05 · 395 阅读 · 1 评论 -
loj6013「网络流 24 题」负载平衡(费用流)
求出平均数,对于每个点,算出是多了还是少了,如果多了,就S向这个点连边,容量为多了多少,花费为0,如果少了,就这个点向T连边,容量为少了多少,费用为0。然后可以转运的仓库之间建边,容量为inf,花费为1.跑最小费用最大流即可。原创 2017-12-12 10:50:04 · 312 阅读 · 0 评论 -
loj6014「网络流 24 题」最长 k 可重区间集(费用流)
首先要对输入数据离散化,然后源点向1连边,容量为k,费用为0,最后一个点向T连边,容量为inf,费用为0,所有的li向ri连边,容量为1,费用为区间长度,所有i向i+1连边,容量为inf,费用为0。这样的话最大流一定满足条件,然后最大费用最大流就是答案了。原创 2017-12-12 11:43:46 · 459 阅读 · 0 评论 -
poj1149 PIGS(建图最大流)
这题真的是好妙啊。首先有一种O(nm)个点的比较直观的建图方法:把每个猪圈拆成n个阶段,第i个人买第i阶段的相应猪圈里的猪。第i阶段的猪可以留到第i+1阶段,第i阶段打开的猪圈可以互相流通到下一阶段。源向所有第一阶段的猪圈连边,容量为猪圈大小,所有人向汇连边,容量为这个人可以购买的数量。然后跑最大流即可,应该也能过。 还有一种更好的建图方法:源向所有猪圈建边,容量为猪圈大小。所有人向汇连边,容量为原创 2017-12-20 22:54:43 · 367 阅读 · 0 评论 -
loj6015「网络流 24 题」星际转移(枚举+分层图最大流)
首先我们发现答案是具有单调性的。而且每一天似乎只与上一天有关。那么我们可以枚举天数,建分层图,看什么时候可以了就是答案。我们一天一天的增加,每次新建这些边:S向新一天的地球建边,容量为inf,新一天的月球向T建边,容量为inf,上一天的空间站向新一天的空间站建边,容量为inf(表示留在空间站),每艘飞船上一天所在的空间站向新一天会到的空间站建边,容量为飞船大小。(表示可以转运那么多人),然后跑最大流原创 2017-12-12 15:30:42 · 352 阅读 · 0 评论 -
bzoj1433 [ZJOI2009]假期的宿舍(最大流/二分图最大匹配)
S向所有需要床的人建边,所有床向T建边,i认识j,i向j的床建边,每个人向自己的床建边,跑dinic,看是否所有需要床的人都有床了。为什么要把人和床分开建呢?因为a认识b,b认识c,a不认识c的话,a并不能睡在c的床上。如果只建一个人,就会出现问题。原创 2017-11-24 13:34:52 · 389 阅读 · 0 评论 -
bzoj1711 [Usaco2007 Open]Dining吃饭(最大流/三分图匹配)
源点向食物建边,食物向牛建边,牛向饮料建边,饮料向汇点建边,把牛拆成两个,保证一头牛只有1会通过。然后dinic原创 2017-11-24 14:25:27 · 603 阅读 · 0 评论 -
bzoj1458 士兵占领(最大流)
这题我哪会啊。思路很妙,先把所有能放士兵的位置都放上,看最多能删去几个。每一行可以删去的就是本来可以放的位置数-需要的位置数,如果为负则直接不合法。然后s向行建边,列向t建边,边权都是可以删去的最大个数。如果x行y列可以放,则建边x->y,容量为1,跑最大流即可。求最多可以删去几个点。原创 2017-11-24 17:09:32 · 414 阅读 · 0 评论 -
bzoj4200 [Noi2015]小园丁与老司机(dp+记录路径+有源汇有上下界最小流)
这题。。。连想带写一整天gg 首先第一问,是个dp,先把所有点按y为第一关键字,x为第二关键字,从小到大排序,我们把所有y相等的点叫做一层。则一层一层的dp,隔层之间转移可以直接O(1)转移(每个点只能从最多三个点上来),层内可以O(n2)O(n^2)转移(如果不要求记录路径的话,可以做到O(n))。同层怎么转移呢?首先我们有刚进入这一层时各个点的最优值,现在我们要求出从这一层出去的每个点的最优值原创 2017-12-21 16:38:14 · 431 阅读 · 0 评论 -
bzoj3876 [Ahoi2014&Jsoi2014]支线剧情(有源汇有上下界最小费用流)
每个点向汇t连一条边,容量为inf,费用为0,相当于其他的边的容量下界为1,求一个费用最小的可行流。有源汇有上下界最小费用流。首先我们回忆无源汇上下界可行流怎么建图,其实我们经常建的都是优化过之后的建图,最朴素的建图方式应该是:对于每条边x->y,容量为(lo,up),建边S->y,容量为lo,x->T,容量为lo,x->y,容量为inf。后来我们发现这样建图存在很多这样的路径:S->x->T,我们原创 2017-12-21 22:03:13 · 791 阅读 · 0 评论 -
bzoj3698 XWW的难题(有源汇有上下界最大流)
建图类似poj2396。告诉你每行每列的和,于是我们这样建图:每行是一个点,源向他连边,每列是一个点,他向汇连边,对于a[i][j],建图i->j+n,容量为(下取整,上取整)。要注意如果原来就是整数,则上下界相同。有源汇上下界最大流做法见:传送门原创 2017-12-22 09:42:18 · 821 阅读 · 0 评论 -
bzoj2055 80人环游世界(有源汇有上下界最小费用流)
当且仅当,所以拆点,容量上下界相等。把源也拆了,容量为[0,m],表示最多m个人,源向所有第一层的点连边,表示每个人可以从任意城市开始,所有第二层的点向汇连边,表示可以在任意城市结束旅行。然后对于所有航线建边,有费用。跑有源汇上下界最小费用流即可。方法见:传送门原创 2017-12-22 09:47:59 · 383 阅读 · 0 评论 -
bzoj4213 贪吃蛇(二分图染色+有源汇有上下界最小费用流)
hzwer这篇题解写的已经很不错了:传送门 首先二分图染色,我们发现对于环形蛇,每个点都连接了两个点。对于非环形蛇,除了头尾两个点以外,每个点也都连了两个点。于是乎,我们就是要把空点都连接上两个点。所以源向所有白点连边,容量为(2,2),所有黑点向汇连边,容量为(2,2)。所有白点可以连接他周围的黑点,所以所有白点向四周的黑点建边,容量为(0,1)。这些边都没有花费。然后我们允许边界上的点只连接一原创 2017-12-22 11:14:56 · 633 阅读 · 0 评论 -
CF546E Soldier and Traveling(最大流)
把每个点拆成两个点跑最大流即可。注意a的和可能和 b的和不相同!原创 2017-12-23 22:51:56 · 512 阅读 · 0 评论 -
CF589F Gourmet and Banquet(二分答案+最大流)
二分答案,每个时间段一个点,每个菜一个点,连边跑最大流,看是否满流即可。原创 2017-12-24 14:50:25 · 348 阅读 · 0 评论 -
poj1698 Alice’s Chance(最大流)
每一天一个点。原创 2017-12-24 15:34:43 · 269 阅读 · 0 评论