网络流

来源:互联网 发布:腾讯代理绝地求生知乎 编辑:程序博客网 时间:2024/06/08 14:37

网络流是一类关于有向图中流量的问题

最重要的性质是流守恒,也就是入流等于出流

 

主要的问题有三类

一是求最大流

  比较简单的是dinic,用fhq的maincode只有21行

  思想是每步bfs分层,然后dfs压流,直到无路可走为止

  实现细节要压流时注意流量守恒

  还有反向边

 

  这类问题的扩展是带上下界的网络流

基础是无源汇的可行流

方法是附加源汇,计算流入下界的和与流出下界的和B[u],按照正负与s ,t连边

 

接下来是有源汇的最大流

方法是二分参数a,连<t,s>=a判断答案就是上面的方法

最小流也是这样

 

二是最小割

  它是最大流的对偶问题

  最小割=最大流

 

  核心思想:将点权转化成边权

         不想选的边设为正无穷

 

这个模型非常巧妙

有很多应用

1.      最大权闭合子图

它的核心是依赖关系

建图:按点权连边

原边设为正无穷

 

 

可以证明C[s,t]=和w(v2+)+和w(v1-)

W=omega(w(V+))-C[S,T]

 

2.      二分图的最小点权覆盖集和最大点权独立集

覆盖集

核心条件:对于<u,v>∈E 必有 u∈V or v∈V

建图:X的点连s,Y的点连t

原边正无穷

求最小割

 

 

独立集

对于<u,v>∈E 必有 ~(u∈V and v∈V)

覆盖集的对偶问题

覆盖集的补集

 

 

这类问题的关键在于转换成二分图

 

3.      分数规划

Y=a(x)/b(x)求y的最大值

 

转换成h(Y)=a(x)-Yb(x)

 方法是二分Y

可证明只有当h(Y)=0时是最优解 

按照这种形式

H(Y)>0 时 Y<Y*

H(Y)<0 时 Y>Y*

 

对于最小割的问题是01动规

H(Y)=x*W

用W建图

用最小割判定

 

4.      最大密度子图

问题是求密度最大的子图

g=|E|/|V|

 

用分数规划推导

二分g

 

建图:

C(u,v)=1 C(s,v)=U C(v,t)=U+2g-dv

U是一个足够大的值保证点权非负 令U=m

Dv是点的度数

H(g)=(U*n-C[S,T])/2

 

推广到带边权图

C(u,v)=w(e)C(s,v)=U C(v,t)=U+2g-dv

U=和w(e)

 

推广到点权边权都有

C(u,v)=w(e)C(s,v)=U C(v,t)=U+2g-dv-2*p(v)

U=和w(e)+2*和(p(v))

 

0 0
原创粉丝点击