网络流总结



 

二分图基础:

最大匹配:匈牙利算法

最小点覆盖=最大匹配

最小边覆盖=总节点数-最大匹配

最大独立集=点数-最大匹配

网络流:

技巧:

1.拆点为边,即一个点有限制,可将其转化为边

BZOJ1066,BZOJ1305

2.考虑左右两部,即比如横竖、男女、比赛和人等。

BZOJ1532

3.对于约束必选的问题,可以考虑下界网络流。费用流中的约束,可以考虑将必选的边费用置为正无穷。

 

4:对于一些跟数学有关的匹配问题,考虑是否会出现二分图,如奇偶分类,因子个数之类的。

 

 

 

找一个字典序最小割集,贪心从小到大选,如果当前边,无法从u bfs到 v,则是一个割边,加入,同时去除和它等价的边,我们做网络流退流,就是从u到S跑最大流

再从v到T跑最大流。

 

 

带下界网络流问题

----------------------转自zyf-zyf

ss和tt为附加源或者说超级源

1.无源汇上下界可行流

  对于(u,v)有向边,上界为a,下界为b 构图方法为:

  (1) ss 到 v 容量为 b

  (2) u 到 tt 容量为 b

  (3) u 到 v 容量为 a-b

 求ss-tt最大流,当且仅当 maxflow=sigma(i,tt)=sigma(ss,i) 时 存在可行流

2.有源汇上下界最小流(可转化为二分判定,T-S边down=0,up=mid,判断是否流量可行)

  如果发现原图有源汇,要先转化为无源汇

  其他点如1方法,建图,另加 t-s 容量为 inf 

  求一遍 ss-tt最大流,此时s-t的流量为 t-s这条边的反向边的流量,记为 x

  在残量网络中删去 t-s 边,具体方法为 e[i].v:=0 e[i xor 1].v:=0

  求一遍 t-s最大流(注意是 t-s),记此时的最大流为y

  则最小可行流为x-y (可以理解为求出一个可行流,然后退掉了一些无用流)

3.有源汇上下界最大流(可转化为二分判定)

  构图如2,只是求完ss-tt最大流后,不做记录,也不删边,直接在残量网络上求s-t最大流,即为答案

  (可以理解为,求出一个可行流后,发现还可现流更多的流,就求s-t最大流 之所以可以不删边

   是因为第一次ss-tt最大流完了之后s-t的流量存在 t-s的反向边s-t中,在跑s-t最大流的时候已经将其算入答案)

题目:BZOJ2502、BZOJ2150、BZOJ1458、BZOJ3876

 

总之,有源汇最大最小种种,我们都用无源汇来理解就好。

----------------------end

 

 流量平衡方程构图法:

 

 

主要思路就是,对于问题我们尝试将其进行数学建模,构成等式,对于一个变量,保证它在两个等式中出现过,且在一个式子中为正,一个为负。

我们可以理解为,这些式子构成了一个流量平衡的网络,一个变量表示一条边,若a为正,则为流入;反之为流出。其中有一些变量是已经确定的常量,

我们理解为确定了上下界一条边,或者是说确定了要有一定流量要流入,所以这一条边,一端连向T,一端由S连向。

 

 

有的变量会有代价,这同时等价于边带上费用,跑上下界费用流就好。

 

 

 

例子:noi2008志愿者招募,bzoj1283序列

列出式子,添加辅助变量变成等式。上下相减。

常数和为0,将每个式子当作一个点

常数为正,则(s,x),容量为常数,费用为0

常数为负,则(x,t) 容量为常数绝对值,费用为0

对于每个变量,正的向负的连容量为inf,费用根据题目。(辅助变量费用为0)

然后就可以费用流解决啦

-------------------------------------------------------

费用与流量平方 ——拆边,费用分别为1,3,5,7,9....

最小割问题的总结:

*意义

1.加inf的边表示不能被割,通常用于体现某个点必须属于某个集合

  连边(s,u,w)代表如果u不在s割的话需要付出代价w

2.连边(u,v,w)代表如果u在s割,v在t割需要付出代价w 但注意,如果u在t割,v在s割是不需要付出代价的。 那么如果连边(u,v,w)以及(v,u,w)则说明当u与v所属割不同的时候需要付出代价w

*技巧

0.当求一些最大问题时,常常用sum减去代价

  这个代价要求最小,于是可以用最小割解决

1.两个点i,j属于不同集合时付出val代价

   新建点k (s,k,val) (k,i,inf) (k,j,inf)

  当vals,valt不同时通常要新建点

  但当相同时,可以直接(u,v,w)(v,u,w)表示不在一个集合就付出w代价

  ----------其实这就是最大权闭合子图的解决方法,因为两点必须在同一集合,所以他们之间可以连inf的边表示不可分离

  例题:BZOJ1497,BZOJ2127,BZOJ1934

2.两个点属于同一集合付出val代价

  这个时候通常图的性质是二分图。(求打脸

  然后我们可以将两部点的性质翻转一下,即左部点连s表示选,右部点连t表示选。

  所以转化后问题变为了第一个。且只需 (i,j,val) (j,i,val)

  例题:BZOJ1976,BZOJ2132,BZOJ3275

3.如果有负权

  比如一个点属于s集合收益x,属于t集合收益y,  (x,y可能为负数),两个点之间还有二元关系(二分图),即一个点有可能选择负收益,求最大收益

  还是先按照技巧0,将所有正权可能的收益加起来,考虑去掉最小代价

  普通的二元关系等通过技巧2、3建边

  那负权收益如何处理呢?考虑将负权应该连向的边s和t交换,权值再取反。

  因为一开始的最大值中就没有加负权,如果要割断该点,一定是正权边和负权边一起被割断,答案合法。如果不在此处隔断,即两边均不需割,答案不变,恰好是取正权的答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值