zoukankan      html  css  js  c++  java
  • 网络流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增广一次,能够增广到的点就是最终点集中的点

     

  • 相关阅读:
    一起学习Avalonia(八)
    国产下的netcore
    一起学习Avalonia(七)
    一起学习Avalonia(六)
    一起学习Avalonia补充(deepin下的使用开发t调试)
    一起学习Avalonia(五)
    一起学习Avalonia补充(Linux下的使用开发)
    一起学习Avalonia(四)
    一起学习Avalonia(三)
    html页面边框的简单设置方法
  • 原文地址:https://www.cnblogs.com/wawawa8/p/9525476.html
Copyright © 2011-2022 走看看