zoukankan      html  css  js  c++  java
  • 网络流24题之太空飞行计划

    题目大意:

    有n个实验要做,做掉奖励相应的钱,但是每个实验需要相应的仪器,每个仪器启动起来要相应的钱,安排使得赚钱最多。

     

    首先引入一个闭合图的概念。

    闭合图就是原图的一个子图,如果一个点u在这个子图内,那么它连出去的所有点v也要在这个子图内。

    最大权闭合图就是点的权值和最大的闭合图。

     

    模型分析:

    1.很明显这是一个二分图,每个实验向需要的仪器连有向边,实验的点权为正,仪器的点权为负,要求最大权闭合图。

    2.这是一个选或不选的问题,所以可以转化成最小割的模型,把选的归为S集,不选的归为T集。但是要求获利最大,最小割是最小,所以我们要换个角度,要求扣的钱最少,因为所有实验的前都加起来是一定的。

    3.在最小割中,如果把S到所有试验表示的点连一条容量为奖励的钱(A类弧),所有仪器到T连一条容量为启动仪器的钱(b类弧),如果把A类弧割掉了,那么对应的那个实验就归到了T集,也就是不做了,那么就会有损失。如果把B类弧割掉了,那么相应的那个仪器归到了S集,也就是有损失。所有最小割就是使得损失最少的方案。

     

    构图方法:

    1.增加源点S和汇点T。

    2.从S到所有实验连一条边,容量为其获利,从所有仪器到T连一条边,容量为其花费。

    3.从每个实验到相应的仪器连容量为inf的边.

    用上述方法实际上只能过10/12的点,因为没有特判定,默认是做的实验越多越好.也就是说有多个最小割的时候,尽可能少割A类弧。所以我们可以把所有弧的容量都乘以一个较大的数,然后让A类弧的容量都+1。这样求出的最小割一定是原图的最小割,并且尽可能少割A类弧. 经过测试通过了所有测试点。

    总结:

    1.最大权闭合图的通用解法:S到正权值的点连边,容量为其权值,负权值的点到T连边,容量为其绝对值,然后原图中的边容量为inf,ans=所有正权和-最小割。具体证明可以参考胡伯涛的论文。

  • 相关阅读:
    应对IBM V7000磁盘故障,你只差这一步!
    鬼知道我经历了什么;记阵列RAID信息丢失的恢复过程
    遇到U盘无法打开,属性显示0字节这样的问题?数据该如何导出?
    2、【Linux网络编程】socket中sockaddr、sockaddr_in和in_addr的区别
    1、【Linux网络编程】socket
    9、wxWidgets 组件wxListBox wxNotebook wxScrolledWindow
    8、wxWidgets 组件wxCheckBox wxBitmapButton wxToggleButton wxStaticLine wxStaticText wxSlider
    7、wxWidgets 对话框
    6、wxWidgets 事件处理
    5、wxWidgets布局管理
  • 原文地址:https://www.cnblogs.com/vb4896/p/4149107.html
Copyright © 2011-2022 走看看