
费用流
Icefox_zhx
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
bzoj4946 [Noi2017]蔬菜(模拟费用流,贪心,线段树)
首先我们有一个费用流的做法。 因为保质期这个东西不太好限制,我们把每种蔬菜都按照过期时间分成若干类,每类大概x个,这样就相当于我们有了n*p种蔬菜。每种蔬菜在指定时间过期。我们把S的奖励放到每一种蔬菜过期时间最晚的那一类中去。我们可以建图,S向每一天i连边,容量为m,费用为0,每一天i向所有第i天过期的蔬菜连边,容量为inf,费用为a,每一天i向下一天i+1连边,容量为inf,费用为0(我把...原创 2018-06-29 22:28:40 · 959 阅读 · 0 评论 -
bzoj2324 [ZJOI2011]营救皮卡丘(Floyd+费用流,DAG最小权路径覆盖)
首先我们考虑最后的k条路线可能长成什么样子: 一定是0->x1->…->xn,x1< x2<…< xn的样子。也就是说我们只需用最多k条这样的路径,覆盖所有点即可。我们一定可以通过安排顺序,使得所有访问都合法。每个点都可以经过多次,我们想到需要预处理两点之间最短距离,且还要满足合法条件。可以用floyd预处理,在用mp[i][k]+mp[k][j]更新mp[i][j]时,保证k< j即可。mp[i原创 2017-12-29 21:56:30 · 509 阅读 · 0 评论 -
bzoj4514 [Sdoi2016]数字配对(数学+费用流)
考虑怎样的两个数x,y符合条件(x>y),首先x要是y的倍数。然后x/y要是一个质数,则x的质因数个数应该比y的质因数个数恰多1.因此我们预处理出g[i],表示a[i]的质因数个数,如果x,y合法则x是y的倍数且g[x]=g[y]+1.可以发现,有边相连的两个点的g[i]一定是一奇一偶!因此我们可以根据g[i]的奇偶性黑白染色,就得到了一张二分图。然后s向左边的点连边,容量为个数,费用为0,右边的点原创 2017-12-28 11:05:13 · 414 阅读 · 0 评论 -
bzoj2879 [Noi2012]美食节(动态加边费用流)
这题和bzoj1070基本一样,但是数据范围大了很多。按原来的方法做多半会T。我们要进行一些优化。 怎么优化呢?动态加边。也就是说我一开始对于每个厨师i,只建出(i,1)(倒数第一个做的菜。)这一个点,去连边。每次增广过一条路之后,记这次增广经过的点为(x,y),那么我就再建出(x,y+1)这个点和他的边。一直做到最大流为p为止。这样做的正确性也比较显然:只有一个厨师做过倒数第k个菜了,他才有可能原创 2017-12-18 14:54:16 · 463 阅读 · 1 评论 -
bzoj1070 [SCOI2007]修车(费用流)
这题思路真是妙妙妙啊。拆点,把每个工人j拆成n个点,每个点表示工人j修他的倒数第k辆车。源点向所有车连边,容量为1,花费为0,所有n*m个工人向汇建边,容量为1,花费为0,车i向工人(j,k)连边,容量为1,花费为k*a[i][j]。表示让工人j倒数第k辆修i车,则修后面的k-1辆车时也要付出a[i][j]的等待时间,所以这一决策一共贡献了k*a[i][j]的等待时间。 因为我们难以确定一个点被其原创 2017-12-18 13:43:03 · 437 阅读 · 0 评论 -
loj6227「网络流 24 题」最长k可重线段集问题(类似loj6014 费用流)
这题好坑啊。(是我太菜了) 注意开区间这个问题。。。很玄学。。。看大佬的处理方式是把(x,y)变成(x*2+1,y*2)。我的强行理解是把原数轴上的每个点拆成两个,一个表示到这个点,一个表示从这个点开始。然后对于(x,x)这种开区间就可以变得合法了。要记得保证li< ri。这题还得开ll,sqrt(负数)会Tle.然后就基本和loj6014一样了,直接建图跑费用流即可。 然后,终于刷完网络流24原创 2017-12-18 11:04:48 · 436 阅读 · 0 评论 -
bzoj2661 [BeiJing wc2012]连连看(拆点费用流)
这题很奇怪呀x 只有在6000以内满足这样性质的点之间建边才是个二分图。范围再大可能就会出现奇环了。 拆点费用流。 把每个点拆成xl,xr,源向所有左点建边,容量为1,费用为0,所有右点向汇建边,容量为1,费用为0.对于有关系的两点(x,y),建边xl>yr,容量为1,费用为x+y,yl->xr,容量为1,费用为x+y。然后跑最大费用最大流,最大匹配就是最大流/2,边权和就是最大费用/2.因为你原创 2017-12-26 10:08:13 · 409 阅读 · 0 评论 -
loj6225「网络流 24 题」火星探险问题(费用流)
最大费用最大流。拆点,一条容量为inf,费用为0的边,如果有价值,一条容量为1,费用为1的边。输出方案。原创 2017-12-18 09:08:50 · 426 阅读 · 0 评论 -
loj6224「网络流 24 题」深海机器人问题(费用流)
最大费用最大流裸题,wa x 2,菜死自己算了。拆边,一条容量为1,有费用,一条容量inf,费用为0。注意是16*16个点。。。原创 2017-12-18 08:37:11 · 375 阅读 · 0 评论 -
bzoj1520 [POI2006]Szk-Schools(费用流)
裸的一个费用流。原创 2017-12-29 22:12:09 · 351 阅读 · 0 评论 -
bzoj1449 [JSOI2009]球队收益(拆边费用流)
做过一道边费用为A*x*x,x为容量的题,这种题一般都要拆边。每条边容量为1,花费为增量。因为增量是递增的,最小费用流,所以保证了正确性。这道题不同的地方在于负场也有贡献。怎么办呢?一开始先假设所有队伍都是负场,算出初始贡献,然后i每赢一场贡献的增量为C*(w+1)^2+D*(l-1)^2)-(C*w^2+D*l^2)=2w*C-2l*D+C+D。建边就可以了。以下摘自hzwer: 首先假设每场比原创 2017-12-29 23:03:51 · 409 阅读 · 0 评论 -
bzoj2895 球队预算(同bzoj1449)
双倍经验。题解:传送门原创 2017-12-29 23:06:39 · 339 阅读 · 0 评论 -
bzoj4849 [Neerc2016]Mole Tunnels(模拟费用流)
这题看完之后很容易想到费用流,但是n太大了不能直接跑。 我们考虑模拟这个费用流的增广过程,每次多了一条S->x的容量为1,费用为0的边后,我们要找一条费用最低的x->T的路径来增广,也就是要在树上找距离x最近的一个还有食物的点。因为是完全二叉树,所以我们可以直接暴力跳父亲,维护f[x]表示x子树内有食物的点到x的距离最小值,g[x]记录这个最近点的位置。那么x->xx的距离+f...原创 2018-06-22 10:58:07 · 522 阅读 · 0 评论 -
bzoj4276 [ONTAK2015]Bajtman i Okrągły Robin(线段树优化建图+最大费用流)
显然是个最大费用流。 线段树优化建图即可。原创 2018-04-26 23:37:52 · 353 阅读 · 0 评论 -
bzoj5154 [Tjoi2014]匹配(枚举+费用流)
先跑一遍费用流,然后枚举此次选择了的n条边,删掉一条,看最大费用还存不存在,如果不存在了就不能删。复杂度O(n4)O(n^4) zz的写了O(n5)O(n^5),spfa还写出锅了,【再见】原创 2018-03-12 13:21:46 · 311 阅读 · 0 评论 -
bzoj1283 序列(线性规划+费用流)
我们建出线性规划松弛型,有 x1+...+xm+y1=kx_1+...+x_m+y_1=k (1) x2+...+xm+1+y2=kx_2+...+x_{m+1}+y_2=k (2) ...... xn−m+1+...+xn+yn−m+1=kx_{n-m+1}+...+x_n+y_{n-m+1}=k (n-m+1) 再添上两项:0=0(0) 0=0(n-m+2) 用(i)-(i-1),得原创 2018-03-17 11:45:41 · 678 阅读 · 0 评论 -
bzoj2668 [cqoi2012]交换棋子(费用流)
可以只看做把黑点移动到目标位置。对每个点的交换次数有限制。我们容易想到拆点。但是这题比较妙的地方在于拆成了三个点。把一个黑点换到目标位置上的一条路径上,除了起终点交换了一次之外,其他点都交换了两次。我们如何体现这个差异呢?拆成三个点x1,x0,x2。 如果起始和目标状态相同,则建边x1->x0,c/2,0 x0->x2,c/2,0 如果只有起始是黑的 ,则建边x1->x0,c/2,0 x0->原创 2018-02-14 23:00:44 · 397 阅读 · 0 评论 -
bzoj1927 [Sdoi2010]星际竞速(费用流)
类似最小路径覆盖,带权了。我们拆点,S向i连边,容量为1,费用为跳跃过去的花费,i向T连边,容量为1,费用为0,表示这个点被经过了。S向i+n连边,容量为1,费用为0,表示从这个星球出来继续走,对于每条边u,v建边u+n->v,容量为1,费用为花费。最大流一定是每个点恰经过一次。所以求最小费用最大流就好了。原创 2018-01-10 10:30:53 · 341 阅读 · 0 评论 -
hdu5988 Coding Contest(乘法变加法,费用流)
求乘积最小。我们都取个对数,就变成了和最小。就有了费用流的感觉。但是因为p<1,所以取了对数后都是负的,跑最短路spfa会gg。怎么办呢?我们要求踩电线的概率最小,也就是求不踩电线的概率最大。所以我们把每条边的费用都变成-log(1-p),都是正数了,我们再跑spfa求最短路就没问题了。注意精度问题,否则会T。然后每条边第一次经过没有花费,我们就拆出一条流量为1,费用为0的边好了。原创 2018-01-10 09:49:28 · 406 阅读 · 0 评论 -
bzoj2893 征服王(tarjan缩点+有上下界最小流/费用流)
限制起终点的可相交最小路径覆盖。首先tarjan缩一波点。然后就是个有上下界最小流,拆点,i->i+scc,容量为(1,inf)。其他边都是(0,inf)。 tips:这题蒟蒻有个不是很懂的地方,我的超级汇点T=2001时就会wa,改成2005就可以A了,是我的代码哪里写挂了吗?望神犇指教。或者可以用最大费用最大流,拆点,i->i+scc,容量为1,花费为1的一条边,再来一条容量为inf,花原创 2018-01-07 13:09:19 · 379 阅读 · 0 评论 -
loj6122「网络流 24 题」航空路线问题(最长不相交路径)
读题又双叒叕出锅了。题目中说从最西端到最东端,所以是钦定了起点为1号点,终点为n号点。我们可以把原题转化为:找到从1到n的两条最长不相交路径。其中1和n可以经过两次,其他点只能经过1次。拆点,那么答案就是最大费用最大流。怎么输出路径呢,可以两遍dfs。最后不得不说,stl大法好。原创 2017-12-17 21:54:16 · 551 阅读 · 0 评论 -
hdu3667 Transportation(费用流)
昨天写这题时可能有点傻x 因为费用是和容量的平方有关,所以把每条边拆成Ci条边,每条边的容量都是1,费用是容量为x和容量为x-1的费用的差值即可。原创 2017-12-17 11:09:02 · 358 阅读 · 0 评论 -
bzoj1061 [Noi2008]志愿者招募(线性规划/费用流)
这题太神了!但是听说是单纯形法求解线性规划裸题???看样子网络流和线性规划有着莫大的联系啊,待研究。 此题基本就是用网络流求解了一个等式的最优解? 附上大神题解:https://www.byvoid.com/zhs/blog/noi-2008-employeeupd:单纯形确实很强orz,因为要求的这个东西不是标准型线性规划,我们把他对偶了就可以了。 附上大神题解:portal#in...原创 2017-12-26 09:06:55 · 652 阅读 · 0 评论 -
loj6010「网络流 24 题」数字梯形(费用流)
首先原题所谓的左下和右下,是要你把那个数字梯形变成等腰的那个样子来看。。也就是(i+1,j)和(i+1,j+1)。。。然后他居然没说有没有负数。。。看数据应该是没有负数。也不会超int。那也行吧x然后我们一问一问的看: 第一问,路径不能相交,也就是说每个点只能经过一次,我们可以拆点来限制住这个条件.然后每条边只能经过一次,通过流量为1来限制。也就是说S向第一层的入点建边,最后一层的出点向T建边,容原创 2017-12-11 23:07:15 · 373 阅读 · 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 · 395 阅读 · 0 评论 -
bzoj3171 [Tjoi2013]循环格(费用流)
首先我们发现,一个完美的循环格一定满足:每个点的入度和出度均为1.如何限制这个条件呢?把每个点拆成x和y,源点向所有的点x建边,容量为1,费用为0,所有的点y向汇点建边,容量为1,费用为0,每个点x向四周的点y建边,容量为1,费用为0或1.这样的话满流一定满足入度出度均为1的限制,所以求最小费用最大流即可。原创 2017-12-10 21:56:46 · 310 阅读 · 0 评论 -
bzoj2424 [HAOI2010]订货(费用流)
我可能有毒吧。一个裸题,我还读错题,要去拆点x。仓库容量限制只是限制你留到下一天的不能超过s。不是一天只能卖s的东西。。。原创 2017-12-10 20:59:26 · 285 阅读 · 0 评论 -
bzoj1221 [HNOI2001] 软件开发(费用流)
和餐巾计划一模一样,题解:传送门 就是这道题的x天,需要+1.原创 2017-12-10 20:19:57 · 300 阅读 · 0 评论 -
bzoj1877 [SDOI2009]晨跑(费用流)
拆点建图费用流即可。 zkw费用流好像跑的很慢???看样子明天还要学习一下spfa的怎么写orz upd:spfa的费用流这么好写???我为什么要学zkw???反正都会被卡???跳槽了跳槽了orz原创 2017-12-09 22:29:21 · 281 阅读 · 0 评论 -
bzoj1834 [ZJOI2010]network 网络扩容(最大流+费用流)
第一问就是直接跑最大流。第二问在残余网络上接着建图,对于原来的每条边,再建一条边容量为inf,费用为w。原边费用为0.建立超级源点向1连边,容量为k,费用为0,跑zkw费用流就好啦原创 2017-12-09 22:01:18 · 322 阅读 · 0 评论 -
loj6008「网络流 24 题」餐巾计划(费用流)
这个问题的主要约束条件是每天的餐巾够用,而餐巾的来源可能是最新购买,也可能是前几天送洗,今天刚刚洗好的餐巾。每天用完的餐巾可以选择送到快洗部或慢洗部,或者留到下一天再处理。 经过分析可以把每天要用的和用完的分离开处理,建模后就是二分图。二分图X集合中顶点Xi表示第i天用完的餐巾,其数量为ri,所以从S向Xi连接容量为ri的边作为限制。Y集合中每个点Yi则是第i天需要的餐巾,数量为ri,与T连接的原创 2017-12-09 21:17:36 · 501 阅读 · 0 评论 -
loj6011「网络流 24 题」运输问题(费用流)
最小费用最大流/最大费用最大流。本来挺裸的。然而gg了好久。因为原来的求最长路其实有点问题?因为有负权边,所以清dis的时候不能只清-1,会出锅的。要清-inf才行。我现在可能才真正理解了最小费用最大流?每次找一条最小的边,是有可能找到带反向边的增广路的,只有这样才能保证正确性。原创 2017-12-12 10:02:52 · 497 阅读 · 0 评论 -
loj6012「网络流 24 题」分配问题(费用流)
同loj6011.传送门原创 2017-12-12 10:15:16 · 338 阅读 · 0 评论 -
loj6013「网络流 24 题」负载平衡(费用流)
求出平均数,对于每个点,算出是多了还是少了,如果多了,就S向这个点连边,容量为多了多少,花费为0,如果少了,就这个点向T连边,容量为少了多少,费用为0。然后可以转运的仓库之间建边,容量为inf,花费为1.跑最小费用最大流即可。原创 2017-12-12 10:50:04 · 358 阅读 · 0 评论 -
bzoj1930 [Shoi2003]pacman 吃豆豆(费用流)
很标准的费用流,但是在建图时需要优化一下。否则spfa跑这种稠密图会T到飞。 贪心的想,如果x可以先到z再到y,则不建边(x,y)。 然后因为经过一个点只有1的贡献,所以要拆点,建图就是S->s,1,0 t->T,1,0 对于每一个点x,建边s->x,1,0 x’->t,1,0 x->x’,1,1 x->x’,1,0.对于每一条边(x,y),建边x’->y,2,0.原创 2017-12-25 20:11:12 · 381 阅读 · 0 评论 -
bzoj3280 小R的烦恼(费用流,类似餐巾计划)
把每一天拆成两个点,像餐巾计划那题一样的建图,跑最小费用流就可以了。原创 2017-12-25 14:02:16 · 328 阅读 · 0 评论 -
poj2516 Minimum Cost(费用流)
每种商品都跑一遍最小费用流就好了。原创 2017-12-24 18:09:30 · 364 阅读 · 0 评论 -
poj2195 Going Home(费用流)
裸题。原创 2017-12-24 15:43:47 · 319 阅读 · 0 评论 -
bzoj4213 贪吃蛇(二分图染色+有源汇有上下界最小费用流)
hzwer这篇题解写的已经很不错了:传送门 首先二分图染色,我们发现对于环形蛇,每个点都连接了两个点。对于非环形蛇,除了头尾两个点以外,每个点也都连了两个点。于是乎,我们就是要把空点都连接上两个点。所以源向所有白点连边,容量为(2,2),所有黑点向汇连边,容量为(2,2)。所有白点可以连接他周围的黑点,所以所有白点向四周的黑点建边,容量为(0,1)。这些边都没有花费。然后我们允许边界上的点只连接一原创 2017-12-22 11:14:56 · 671 阅读 · 0 评论 -
bzoj2055 80人环游世界(有源汇有上下界最小费用流)
当且仅当,所以拆点,容量上下界相等。把源也拆了,容量为[0,m],表示最多m个人,源向所有第一层的点连边,表示每个人可以从任意城市开始,所有第二层的点向汇连边,表示可以在任意城市结束旅行。然后对于所有航线建边,有费用。跑有源汇上下界最小费用流即可。方法见:传送门原创 2017-12-22 09:47:59 · 422 阅读 · 0 评论