最小割
最大权闭合子图
闭合子图是什么?
就是一个有向无环连通图。
最大权闭合子图就是说,图上的节点有正有负,我们要选出权值最大的点集。
建图过程:
- \(S\xrightarrow{w(i)} i\ (w(i)>0)\)
- \(i\xrightarrow{\infty} j\ ((i,j)\in E)\)
- \(i\xrightarrow{-w(i)}T\ (w(i)<0)\)
然后跑最大流,用\(\sum w(i)\ (w(i)>0)\)(所有正权点的权值和)减去求出来的最大流(最小割)就是答案。
为什么要这样呢?
分类讨论:
- 如果正权边被割了,那就说明在最小割中,正权边\(\leqslant\)对面的负权边(否则被割掉的就不会是正权边而是负权边),对应的情况就是:选了正权边之后,正权边所连通的负权边比正权边还大(在绝对值上),这样选就亏本了,所以才需要割掉(在代码中就是从正权点的权值和中减去)。
- 如果负权边被割了,就说明正权边比负权边大,选了之后不会亏本,割掉的只是选了这个正权点所付出的最小成本。
(感觉这个是最小割当中最好理解的了……)
二选一模型
- 如果\(a\)被割给了\(S\),\(b\)被割给了\(T\),就有相应的代价;(双核CPU)
- 如果一个点集被割给了\(S\),就有相应的收益;(寿司餐厅、Happiness、小M的作物)
- 如果一个点被割给了\(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\]
(画反了,不想调)
(因为例题少所以就不讲了,反正最小割目前只接触了这两种模型)