深入浅出网络流之最小割

最小割

最大权闭合子图

闭合子图是什么?

就是一个有向无环连通图

最大权闭合子图就是说,图上的节点有正有负,我们要选出权值最大的点集。

建图过程:

  1. \(S\xrightarrow{w(i)} i\ (w(i)>0)\)
  2. \(i\xrightarrow{\infty} j\ ((i,j)\in E)\)
  3. \(i\xrightarrow{-w(i)}T\ (w(i)<0)\)

然后跑最大流,用\(\sum w(i)\ (w(i)>0)\)所有正权点的权值和)减去求出来的最大流(最小割)就是答案。

为什么要这样呢?

分类讨论:

  1. 如果正权边被割了,那就说明在最小割中,正权边\(\leqslant\)对面的负权边(否则被割掉的就不会是正权边而是负权边),对应的情况就是:选了正权边之后,正权边所连通的负权边比正权边还大(在绝对值上),这样选就亏本了,所以才需要割掉(在代码中就是从正权点的权值和中减去)。
  2. 如果负权边被割了,就说明正权边比负权边大,选了之后不会亏本,割掉的只是选了这个正权点所付出的最小成本。

(感觉这个是最小割当中最好理解的了……)


二选一模型

  1. 如果\(a\)被割给了\(S\)\(b\)被割给了\(T\),就有相应的代价;(双核CPU
  2. 如果一个点集被割给了\(S\),就有相应的收益;(寿司餐厅Happiness小M的作物
  3. 如果一个点被割给了\(S\),并且一个点集\(V'\)中有一个点被割给了\(T\),就有相应的代价

第一种

\[S\xrightarrow{w(a)} a \xrightarrow{\text{代价}}b \xrightarrow{w'(b)}T\]

这样的话,求出最小割之后,割掉的就是最小的代价。

第二种

代价是用来最小化的,所以用最小割可以直接解决,那收益呢?

没关系,可以先把收益都加起来,然后再把收益当成代价去建弧,跑最小割。

这样,割掉的就是最小的收益,剩下的收益自然就是最大的了。

第三种

(记不得老师讲什么了,自己脑补的)

\[T\xleftarrow{w(a)} a \xleftarrow{代价} x(附加点) \xleftarrow{\infty}(v\in V')\xleftarrow{w(v)} S\]

(画反了,不想调)

(因为例题少所以就不讲了,反正最小割目前只接触了这两种模型)

猜你喜欢

转载自www.cnblogs.com/info---tion/p/11305399.html