搭配飞行员问题
最简单的一道题
就是一个二分图匹配
太空飞行计划
最大权闭合子图
什么叫"最大权闭合子图"呢?
就是给定一个有向图,在里面选择一个点集,使得点集中的点没有连向点集外的点的边,并且每个点都有一个权值,使得这个点集的权值最大
我们把实验做成点,材料做成点,每个实验要用哪些材料我们就连上去
一个闭合子图就对应着一个方案,我们把实验的收益当成实验对应的点的权值,材料的花费的相反数当成材料对应的点的权值,然后就是最大权闭合子图了
怎么求解呢?
我们建立源点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增广一次,能够增广到的点就是最终点集中的点