最小割模型在信息学竞赛中的应用___读后的收获

在看了Amber的《最小割模型在信息学竞赛中的应用》后感觉到了自己的智障……



我还是按照目录来,其实第一个子目录中我收获最大的还是01分数规划的内容。

01分数规划:给定n个条件,在其中选取一些条件,使得要求的目标函数达到最值。

通俗一点说:给定两个数组,a[i]表示选取i的收益,b[i]表示选取i的代价。如果选取i,定义x[i]=1否则x[i]=0。每一个物品只有选或者不选两种方案,求一个选择方案使得R=sigma(a[i]*x[i])/sigma(b[i]*x[i])取得最值,即所有选择物品的总收益/总代价的值最大或是最小。

对于上面的式子,对它变一下形,我们可以定义函数g(R) = sigma(a[i]*x[i]) - R * sigma(b[i]*x[i]); 这个式子一定是随R递增而递减的。如果我们需要求的是R的最大值,当 sigma(a[i]*x[i]) - R * sigma(b[i]*x[i]) > 0 时,那么就有sigma(a[i]*x[i]) / sigma(b[i]*x[i]) >  R,然而R应该等于sigma(a[i]*x[i]) / sigma(b[i]*x[i]),所以这告诉我们R还可以更大。但是当g(R) < 0 时就说明R已经超过了能达到的最大值,取不到了。由于R的单调性, 我们就可以二分来查找R。

在第二个子目中就是对分数规划的应用,其中的g(R)的大小就通过最大流去计算。

第三个子目,其中闭合图就是选一个点集使得所有点的出边都指向这个点集里的点,然后加上这的点集里的点的所有出边。

如果要求一个原图中最大权(每一个点都带有权值)的闭合图,我们可以虚拟出源点和汇点,将源点连出一条等于点权的边指向所有的正权点,然后每个负权点连一条等于点权的绝对值的边练往汇点,其余剩下的边都设为正无穷。然后跑一遍最大流,求出最小割,就是总的正权和减去最大权闭合图的值。其实证明最大权闭合图的权值等于正权点的权值之和减去最小割等于最大权闭合图的权值并不难,可是我们怎么能想到这一点呢?

然后就是二分图的最小点权覆盖集 / 最大点权独立集了。

点覆盖就是说选取一个点集使得所有的边都有至少一个端点在这个点集中。 点独立集就是一个点集使得所有的点没有公共边。

显然,每一个点独立集都对应了一个点覆盖集,他们是补集的关系。所以这两个问题其实是等价的。然后,我们知道二分图的最小点覆盖等价于最大匹配,所以我们实际上只需要求出这个二分图的最大带权匹配就可以了。

上面大概就是我在囫囵读了Amber神牛的论文后的一点收获,知道了网络流建模的重要性,见识了许多没见过的思想,不过还是有没有校消化的地方,我会好好想一想的。

你可能感兴趣的:(网络流)