码迷,mamicode.com
首页 > 其他好文 > 详细

【个人整理】网络流

时间:2018-12-17 02:44:27      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:限制   bsp   最小   ahoi2009   cqoi2014   直接   weight   []   inf   

说明:S,表示超级原点,T表示超级汇点,<i,j,k(,l)>表示i到j建边,流量为k(,费用为l)

 bzoj4177 Mike的农场

题解:考虑割,养牛的收益为a[i],养羊b[i],对于每个位置<S,i,ai> <i,T,bi>分别表示养牛和养羊,对于两个互相影响的位置<i,j,ci>;做最小割可以满足前两个限制 ;第三个限制,如果全养牛可以获得d,新建一个点x,考虑要求全养牛的位置为集合为s,<S,x,d> , <x,si,inf> , 当si中有一个没有被割,那么<S,x,d>一定被割,最小割为c,ans = $( \sum (a[i]+b[i]) + \sum c[i]  ) – C $         


bzoj3504 [cqoi2014]危桥

题解:a1->a2 an次,b1->b2 bn次 , 边有通过次数的限制;直接跑最大流判断会有问题,因为可能会有a1->b2 , b1->a2的路径充当流量,交换a1,a2再反向跑一边即可;

bzoj2039[2009国家集训队]employee

题解:首先<i,T,Ai>表示是否选择购买,考虑每对经理(i,j) , <S,i,Ei,j> <S,j,Ei,j> <i,j,2*Ei,j> , 这个网络可以化简:<S,i,$\sum_{j}Ei,j$> <i,T,Ai> <i,j,2*Ei,j>,假设最小割为C,E的和为Sum,ans = Sum – C;

bzoj1797[AHOI2009]mincut

题解:

先做一遍最大流,考虑残量网络(要考虑反向边),

如果一条边有可能不满流那么它一定不可能为任何个割的一部分,一定满流那么它一定为某个割的一部分;

考虑一个最小割对应的划分集合S集合T集,跨越ST集合的边为割,那么残网中一定只存在T->S的边,假设存在S-T的边,要么为某个S->T的正向边要么为某个T->S反向边,前者不符合割后者不符合最小(感性理解吧。。。。);

所以在残网中做scc,设i所在scc为bl[i] , 首先bl[S]!=bl[T],对于残网中的边(u,v):

①如果bl[u]==bl[v],一定不可能为割边

②如果bl[u]!=bl[v]且bl[u]==bl[T]&&bl[v]==bl[S],则一定为割边,否则在缩点后的残网DAG上一定可以有一个另外的割;

bzoj3158 千钧一发

题解:考虑ai,aj均为奇数,令ai=2k1+1,aj=2k2+1,画一画ai^2+aj^2发现不满足①,考虑ai,aj都为偶数,显然不满足②,于是转成最小割做就好;

bzoj1061 [Noi2008]志愿者招募

题解:

orz byvoid

 https://www.byvoid.com/zhs/blog/noi-2008-employee

还有一种上下界的做法:

https://www.cnblogs.com/nietzsche-oier/p/8205275.html

bzoj3876 []


【个人整理】网络流

标签:限制   bsp   最小   ahoi2009   cqoi2014   直接   weight   []   inf   

原文地址:https://www.cnblogs.com/Paul-Guderian/p/10128831.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!