关于最小割的进一步理解

以前只知道最小割就是最大流...网络流背个模板,没了

根本没有深入理解,最近写了一些题才知道自己很 $naive$

废话不多说,开始正题(假设大家都会网络流的代码,并且知道网络流在做什么)

首先最小割就是最大流(废话)

一条图的最小割中,一定有一些边,它们是满流的(如果不满流就不是最大流了)

不妨把这些边称作割边,显然,这些割边把图分成两个部分,一个与源点 $S$ 在同一个部分,一个与汇点 $T$在同一个部分

放图理解:

  首先原图长这样:

  然后一种最小割长这样(红色的是满流的边):

 

我们把与 $S$ 在同一个部分的点集叫作 $S$割,与 $T$ 在同一个部分的点集叫作 $T$割

那么 $S$割 包括点 ${1,2,4}$, $T$割 包括点 ${3,5,6,7}$

注意割边是满流边的子集,比如这个图:

割边可以是 $(S,1)$ 或者是 $(1,2)$ ,显然对于这种有多解的最小割随便一种都合法

如果把边看成 $(u,v,cost)$(从 $u$ 到 $v$,花费(流量)是 $cost$ ),考虑最小割的实际意义

就是把点集分成 $S$割 和 $T$割 的最小花费

(请先好好理解以上理论再看下去$qwq$)

接下来考虑最小割模型中的三种边:

1. $(S,u,cost)$,意思是 如果 $u$ 在 $T$割(此边满流),那么要产生 $cost$ 的代价

2. $(u,T,cost)$,意思是 如果 $u$ 在 $S$割(此边满流),那么要产生 $cost$ 的代价

再进一步考虑一条边 $(u,v,cost)$ 的实际意义:如果把 $u$ 给 $S$割, $v$ 给 $T$割(此边满流),那么会产生 $cost$ 的代价

扩展一下,对于一条边 $(u,v,cost)$ ,如果 $cost$ 是正无穷 那么这个边的意思是什么?

光速回答,$u$ 和 $v$ 不能在同一个割集!

好像很有道理,因为这个边不可能满流,所以 $u$,$v$ 必须在同一个割集里

但是注意,边是有向边,从 $u$ 到 $v$!如果 $u$ 在 $T$割,$v$ 在 $S$割 也是合法的

所以这条边的真正意思是 ,如果 $u$ 在 $S$割,那么 $v$必须在 $S$割

(休息一下,一定要真正理解边的意义$qwq$)

更近一步,对于一种题型:有 $n$ 个点,每个点有一个价值 $val$ (可能为负),点之间有一些限制关系 $(x,y)$(选了点 $x$ 必须选点 $y$),并且保证对于任意限制 $(x,y)$, $val[x]>0,val[y]<0$,求获得的最大价值

显然最大价值相当于总的正的价值减去 最小要失去的价值(有些正点不能选,有些负点要选),考虑求出最小要失去的价值

构建网络流模型,把点 $u$ 给 $S$割 表示选择点 $u$,给 $T$割 说明不选点 $u$

对于一个限制 $(x,y)$,连 $(S,x,val[x])$,此边为割边表示 $x$ 不在 $S$割,那么就相当于不选择 $x$,会失去 $val[x]$ 价值(对最小割产生 $val[x]$ 的贡献)

连 $(y,T,-val[y])$ ,此边为割边表示 $y$ 在 $S$ 割,相当于选择 $y$,会得到 $val[y]$ 的负的价值(对最小割产生 $-val[y]$ 的贡献)

连 $(x,y,INF)$ 表示如果 $x$ 在 $S$割,那么 $y$ 也在 $S$割(选 $x$ 必须选 $y$)

因为最终每个点都要确定选或者不选,所以必须要把点集分成 $S$割 和 $T$割

所以最小割就是最小要失去的价值

例题:太空飞行计划问题

把实验看成正点,仪器看成负点,然后限制关系就是限制关系,直接把上面的方法套进来就好了$qwq$

要输出具体方案,直接看看那些点在 $S$割就好了,(网络流就不用放代码了吧$qwq$,毕竟网络流考的是建模$qwq$)

另一题例题:最大获利(同样的方法,不用再解释了吧$qwq$)

用这种思想可以很容易地证明最大权闭合子图的正确性(比我在网上看的其他方法好多了$qwq$)

原文地址:https://www.cnblogs.com/LLTYYC/p/10763685.html

时间: 2024-10-08 20:07:55

关于最小割的进一步理解的相关文章

zoj2587 Unique Attack 判断最小割是否唯一

题目链接: zoj2587 题意: 给出一张无向网络图,并给出起点和终点,破坏图的每一条边需要一定的费用,问破坏起点和终点的连通性的费用是否唯一. 解题思路: 破坏两点的连通性的最小费用,很容易联想到 网络流中的最小割, 建立源点 汇点 同时 因为图是无向图,我们需要将每条边建两次(正反向). 然后就是判断这个最小割是否唯一了: 首先 从源点开始 dfs  通过非饱和边  统计所有能走到的点  记为s1 然后 从汇点开始 dfs  通过非饱和边  统计所有能走到的点 记为s2 如果s1+s2==

最小割学习小结

一直对最小割模型的理解不够深刻,这段时间学习.总结了一下. [强烈推荐胡伯涛和彭天翼的论文] 总结几点: (1)跑完一遍S-T最大流后,在最小割[S,T]中的边必定都是满流的边,但满流的边不一定都是最小割中的边. (2)最小割的任意方案:跑一遍S-T最大流,然后在残余网络中S能够达到的点为一个割集,剩下的点为另一个割集. (3)最小割方案的唯一性:跑一遍S-T最大流,如果在残余网络中任意一个点都能从S或者T出发达到,那么最小割方案有唯一性:否则没有唯一性. (4)跑一遍S-T最大流后,残余网络中

最小割的理解和应用

博主比较菜QwQ,一直学不会最小割,全靠背板子背模型来做(chao)题(jie). 省选和CTSC打完(beng)了,于是对以前学的网络流的最小割算法进行一些简单的总结. 最小割 本文讨论的最小割都是源汇最小割,关于全局最小割请自行学习.源汇最小割,简单来讲就是切去一些边使得源汇不连通,并使得删去的边权权值最小. 常用的方法是跑一遍最大流,关于为什么最大流等于最小割会在随后给出. 集合划分 因为源汇最小割即就是将源汇划分到不同的集合,那么最简单的应用大概就是最小代价划分集合了.本文用\(S\)表

There is a war (hdu 2435 最小割+枚举)

There is a war Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 970    Accepted Submission(s): 277 Problem Description There is a sea. There are N islands in the sea. There are some directional

【BZOJ3232】圈地游戏 分数规划+最小割

[BZOJ3232]圈地游戏 Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到回到出发点,且在行走途中不允许与已走过的路线有任何相交或触碰(出发点除外).记这条封闭路线内部的格子总价值为V,路线上的费用总和为C,DZY想知道V/C的最大值是多少. Input 第一行为两个正整数n,m. 接下来n行,每行m个非负整数,表示对应格子的价值. 接下来n

hdu 3204(最小割--关键割边)

Ikki's Story I - Road Reconstruction Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 7491   Accepted: 2172 Description Ikki is the king of a small country – Phoenix, Phoenix is so small that there is only one city that is responsible fo

hdoj 3820 Golden Eggs 【双二分图构造最小割模型】

Golden Eggs Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 505    Accepted Submission(s): 284 Problem Description There is a grid with N rows and M columns. In each cell you can choose to put

hdu 3657 最小割的活用 / 奇偶方格取数类经典题 /最小割

题意:方格取数,如果取了相邻的数,那么要付出一定代价.(代价为2*(X&Y))(开始用费用流,敲升级版3820,跪...) 建图:  对于相邻问题,经典方法:奇偶建立二分图.对于相邻两点连边2*(X&Y),源->X连边,Y->汇连边,权值w为点权. ans=总点权-最小割:如果割边是源->X,表示x不要选(是割边,必然价值在路径上最小),若割边是Y-汇点,同理:若割边是X->Y,则表示选Y点且选X点, 割为w( 2*(X&Y) ). 自己的确还没有理解其本质

求无向图最小割

先解释下名词的意思. 无向图的割:就是去掉一些边,使得原图不连通,最小割就是要去掉边的数量最小. 解决这个问题的常用办法就是Stoer-Wagner 算法: 先说下这个算法的步骤后面给出证明: 1.min=MAXINT,固定一个顶点P 2.从点P用类似prim的s算法扩展出"最大生成树",记录最后扩展的顶点和最后扩展的边 3.计算最后扩展到的顶点的切割值(即与此顶点相连的所有边权和),若比min小更新min 4.合并最后扩展的那条边的两个端点为一个顶点 5.转到2,合并N-1次后结束