最小割的一点理解
2014-08-04 22:07
99 查看
转自/article/2486559.html
一、基本问题:
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)
相关文章推荐
- 最小割的一点理解
- foreach的一点理解
- static的一点理解
- 关于多对多关系的一点理解
- 朱、刘算法:求最小树形图权值个人理解+个人详解【最小树形图模板】
- 对反向传播算法(Back-Propagation)的推导与一点理解
- 关于游戏启动的一点理解
- 从有上下界有源汇最小流的实践中得出的一点思考
- 关于equals()和==操作的一点理解
- 关于NI CompactRIO自定义模块中FPGA与Labview FPGA中编程的一点理解
- 关于unix下实际用户ID、有效用户ID、设置用户ID、文件所有者ID的一点理解
- Android性能优化一点理解
- 对功率谱的一点理解
- 关于C#中Thread.Join()的一点理解
- 事件与委托的一点概念理解
- 对参数optimizer_index_cost_adj的一点理解_041009
- 对类前置声明和包含头文件的一点理解
- 软件项目开发流程的一点个人理解和思考
- js之ajax的一点理解
- 关于引用对象的使用的一点小理解