最小割的一点理解
2012-03-07 20:52
169 查看
转自mjmjmtl大牛:
一、基本问题:
1.到底什么是割:原始点集为V,选出一些点集S使得s∈S,T=V-S,t∈T,则S到T的边为S到T割,记做[S,T]。
2.什么是最小割:图中所有的割中,边权值和最小的割为最小割!
3.割得容量容量和流量计算的区别:割[S,T]的容量为∑(边(u,v)的容量和),其中u∈S,∈T。也就是说割的容量不计算反向的边!!而流量为正向的和反向的代数和。
4.最大流-最小割定理:最大流的值为最小割的容量!
5.怎样求割:求完最大流后,在残留网络中从source开始dfs,被染色的为S,未被染色的为T,则边集[S,T]为割。(或者从sink反向dfs,被染色的为T,未被染色的为S,边集[S,T]为割)这种思想应该没有错误,我曾经证明过,正向和反向floodFill都能得到合适的解。然而我按照逆向floodFill提交了两道special
judge的题,都没有AC!分别是spoj839和poj2125(其中poj2125的SPJ有问题,一会AC一会WA),然而,对于spoj839我自己对我的逆向floodFill答案和正向floodFill答案做了对比(如果有区别,在程序中会死循环),发现二者没有区别。感觉是SPJ的问题。这一点,暂且放置,以后再次看到了再说。
二、一些割的性质:
1.割[S,T],流量只能从S流向T,不能从T流向S!(在最大流后找割dfs时其实就满足这个性质,假设T中一个点v流向S中的一个点u,那么u到v有负流量,则u到v的残留网络严格大于0。反向dfs证明类似)
2.最大流后,割边一定满流。减小某一割边后,网络流减小。
3.如下图,从s沿着残余流量dfs,得到点集S;同理沿着t反向dfs,得到点集T;剩下的是M。分界线cut1和cut2是其中一割,边自然为割边。然而在M中还存有割边(一定存有!!否则M就没用了!)
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/2010022200261834b2d57fae26a283b4444961f2992e69.bmp)
4.退化一下:如下图所示,S和T有相邻部分边集E1,S和M重合边集相邻部分边集E2,M和T相邻边集部分E3,那么直接升高E1中某条边的容量,会使整体容量直接增高!反之:而如果增大S和M相邻的割边或者M和T相邻的割边,网络流不直接增大,因为M中还存有割边限制
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/cut2.jpg)
5.继续退化:如果M==空集,cut1和cut2重合(变为cut),则网络中割唯一。可以通过 if ( |S|+|T|==总点数) 来判断
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/cut3.jpg)
三、割的三个典型应用(参考《最小割模型在信息学竞赛中的应用》):最大权闭合图、最大密度子图、二分图的最小点权覆盖(二分图的最大点权独立集)
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/2987.jpg)
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/3155.jpg)
一、基本问题:
1.到底什么是割:原始点集为V,选出一些点集S使得s∈S,T=V-S,t∈T,则S到T的边为S到T割,记做[S,T]。
2.什么是最小割:图中所有的割中,边权值和最小的割为最小割!
3.割得容量容量和流量计算的区别:割[S,T]的容量为∑(边(u,v)的容量和),其中u∈S,∈T。也就是说割的容量不计算反向的边!!而流量为正向的和反向的代数和。
4.最大流-最小割定理:最大流的值为最小割的容量!
5.怎样求割:求完最大流后,在残留网络中从source开始dfs,被染色的为S,未被染色的为T,则边集[S,T]为割。(或者从sink反向dfs,被染色的为T,未被染色的为S,边集[S,T]为割)这种思想应该没有错误,我曾经证明过,正向和反向floodFill都能得到合适的解。然而我按照逆向floodFill提交了两道special
judge的题,都没有AC!分别是spoj839和poj2125(其中poj2125的SPJ有问题,一会AC一会WA),然而,对于spoj839我自己对我的逆向floodFill答案和正向floodFill答案做了对比(如果有区别,在程序中会死循环),发现二者没有区别。感觉是SPJ的问题。这一点,暂且放置,以后再次看到了再说。
二、一些割的性质:
1.割[S,T],流量只能从S流向T,不能从T流向S!(在最大流后找割dfs时其实就满足这个性质,假设T中一个点v流向S中的一个点u,那么u到v有负流量,则u到v的残留网络严格大于0。反向dfs证明类似)
2.最大流后,割边一定满流。减小某一割边后,网络流减小。
3.如下图,从s沿着残余流量dfs,得到点集S;同理沿着t反向dfs,得到点集T;剩下的是M。分界线cut1和cut2是其中一割,边自然为割边。然而在M中还存有割边(一定存有!!否则M就没用了!)
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/2010022200261834b2d57fae26a283b4444961f2992e69.bmp)
4.退化一下:如下图所示,S和T有相邻部分边集E1,S和M重合边集相邻部分边集E2,M和T相邻边集部分E3,那么直接升高E1中某条边的容量,会使整体容量直接增高!反之:而如果增大S和M相邻的割边或者M和T相邻的割边,网络流不直接增大,因为M中还存有割边限制
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/cut2.jpg)
5.继续退化:如果M==空集,cut1和cut2重合(变为cut),则网络中割唯一。可以通过 if ( |S|+|T|==总点数) 来判断
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/cut3.jpg)
三、割的三个典型应用(参考《最小割模型在信息学竞赛中的应用》):最大权闭合图、最大密度子图、二分图的最小点权覆盖(二分图的最大点权独立集)
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/2987.jpg)
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/3155.jpg)
![](http://bchine.com/mjmjmtl/wp-content/uploads/2010/03/21251.jpg)
相关文章推荐
- 最小割的一点理解
- C#中foreach的一点理解
- 观察者模式的一点小理解
- 从有上下界有源汇最小流的实践中得出的一点思考
- Java's Interface自己的一点理解
- 对功率谱的一点理解
- 理解ArcSDE和OracleSpatial一点诀窍
- 关于malloc的一点理解
- 关于linux0.12临界资源的一点理解和猜测
- convertView.setTag方法的一点理解
- js之ajax的一点理解
- Oracle学习笔记:备份、还原、恢复的一点理解
- C# 委托与事件的一点理解(2)
- 关于RNN(Seq2Seq)的一点个人理解与感悟
- C# abstract的一点理解
- hdu3374String Problem(kmp+最小表示+next数组理解)
- 回调函数的一点理解
- 关于typedef的一点理解
- 关于tensorflow conv2d卷积备忘的一点理解
- 关于指针的一点小的理解