最大权闭合子图小结

版权声明:欢迎随便转载。 https://blog.csdn.net/a1214034447/article/details/82823237

闭合子图:

从原图的点集V中选取若干个点生成一个新的点集v,若任意的节点i∈v,在原图中有i->j的边时j也∈v,那么v构成的子图就被称为闭合子图.

例如有3个点1,2,3且有边1->3,2->3构成的一个图.此时有闭合子图{1,3},{2,3},{3},{1,2,3}以及∅

最大带权闭合子图:

此时每个节点都有其相应的权值,选择一个闭合子图使得他们的节点权值和最大,那么这个子图就被称为最大权闭合子图.

求解最大权闭合子图的值:

建立源汇点S,T.

①节点i权值为正的建立一条S->i容量为其权值的边

②节点i权值为负的建立一条i->T容量为其权值绝对值的边

原图中的边的容量都设为inf(无穷大)

跑一边网络流求出最小割(最大流) = maxflow

最大权闭合子图的值  =  ∑(所有节点正权值和) - maxflow

证明:

已知最小割会把残量网络分为两个点集:

①S能到达的点形成的点集A

②能到达T的点形成的点集B

A0,B0分别表示A,B中原来点权是负数的点集,A1,B1分别表示A,B中点权原来是正数的点集。

A+B-{S,T} = V

简单割:最小割割边都是与S或者T直接相连的边

因为是简单割,所以割边都不是原图上的边,所以残量网络上还保留着原图.

最小割是简单割:因为没有与S或者T直接相连的边的容量都是inf,所以肯定不会是割边,所以割边的一端一定是S或T,证明完毕.

点集A是闭合子图:

反证法:如果点集A不是闭合子图,那么就有i∈A,j∈B,至少存在一条i->j的边,因为S可以到达i,又有i->j,那么就存在j∈B使得S可以到达j,所以j也∈A,此处已经矛盾了.所以A是闭合子图.

A点权和 =  A1点权和 - |A0点权和|

最小割 = B1点权和 + |A0点权和|

易知B1中的点和S的连边满流,A0中的点和T的连边也是满流的(证明:不满流的话之前有与S或者T的连边,但在残量网络中怎么就到达不了了呢?)

若需证明最小割 = B1点权和 + |A0点权和|,即证明B1和A0两个点集是相对独立的.前面已经知道A0中的点不能到达B1.

所以不会存在路径有i∈A0,j∈B1使得有i到j的路径,更不会有j到i的路径,因为S到不了j,所以不会有S到T的路径上有j到i的路径.

所以B1中的点和A0中的点不会出现在同一条路径上,所以两集合相对独立,所以割边就是两个集合的叠加,即:

最小割 = B1点权和 + |A0点权和|,证明完毕

又A1点权和 + B1点权和 = 正点权和 = A点权和 + 最小割,即

A点权和  = 正点权和 - 最小割,已知最大权闭合子图值<=正点权和,又A是一个闭合子图.

所以要使得A点权和最大就要使割最小,即求最小割.证明完毕

猜你喜欢

转载自blog.csdn.net/a1214034447/article/details/82823237