网络流24题 一句话题解(updating)

 

搭配飞行员问题

 

最简单的一道题

就是一个二分图匹配

 

太空飞行计划

 

最大权闭合子图

什么叫"最大权闭合子图"呢?

就是给定一个有向图,在里面选择一个点集,使得点集中的点没有连向点集外的点的边,并且每个点都有一个权值,使得这个点集的权值最大

我们把实验做成点,材料做成点,每个实验要用哪些材料我们就连上去

一个闭合子图就对应着一个方案,我们把实验的收益当成实验对应的点的权值,材料的花费的相反数当成材料对应的点的权值,然后就是最大权闭合子图了

 

怎么求解呢?

我们建立源点s和汇点t,将s向所有正权值的点连边,边权为这个权值,将所有负权值的点向t连边,边权为负权值的相反数,图内部的边边权设置为inf

然后跑一边最大流,正权值的和减去流量就是答案了

 

原理

首先我们看一个流对应的割

一个割的定义就是把点集分成两半,s在一个里面,t在另一个里面,不存在s到t的路径

再看闭合子图的定义,就是子图内部的点不能连向外部的点 那么我们就把内部的点和s放在一起,把剩下的点和t放在一起,因为定义,不存在S到T的边,所以这就是一个割

不难发现任何一个割都对应着一个闭合子图

我们要求的是闭合子图里面点的权值和,就是正权值的和-负权值的绝对值的和

那么这个割的大小是什么呢?

因为原图里面边的权值都是inf,所以割肯定割的是s连出去的边和连向t的边

那么子图内部的点和t之间没有边,子图外部的点和s之间没有边,我们假设闭合子图的点集为$set$,那么割的大小就是 $sum_{u otin set & (s,u)in E} {cost(s,u)}+sum_{u in set & (u,t)in E}cost(u,t)$

我们要计算的是$sum_{u in set & (s,u)in E} {cost(s,u)}-sum_{u in set & (u,t)in E}cost(u,t)$,不难发现这就等于$sum_{u in V & (s,u) in E}{cost(s,u)}$剪掉割的大小

前面那个是定值,所以只要求最小割就可以了

 

输出方案

流是如何转化为割的呢? 其实就是把满流的边割掉

所以我们再从s增广一次,能够增广到的点就是最终点集中的点

 

原文地址:https://www.cnblogs.com/wawawa8/p/9525476.html