zoukankan      html  css  js  c++  java
  • bzoj2673

    限制这么多 肯定是网络流

    考虑连边

    首先我们计算出每行最多放的棋子数$sx[i]$,每列最多放的棋子数$sy[i]$

    首先由源点向第$i$行连流量为$sx[i]$费用为$0$的边,第$i$列向汇点连流量为$sy[i]$费用为$0$的边,这个是套路

    第一个限制很好解决,采用正难则反思想,考虑能“拆下”多少绿色信号灯,第$i$行向第$i$列连一条流量为他们最大可以拆下信号灯数量费用为$0$的边就可以了

    我们考虑第二个限制

    显然直接建边不是很可做

    我们考虑枚举

    如果枚举总流量的话,第一个限制中连的边的流量不好确定

    我们考虑枚举每行每列最大的零件数量,记为$x$

    这样每行向每列连流量为$x$的边就可以了

    然后我们考虑绿色信号灯如何“拆除”

    然后就会发现我们之前连的边...费用都是$0$

    如果矩阵中某个点$(i,j)$是$.$的话

    我们由第$i$行向第$j$列连流量为$1$,费用为$1$的边

    然后跑最小费用最大流

    这个费用流要注意,流量一定要等于所有可以安装的信号灯的数量

    因为一个合法的流要么是经过“不拆除”的$i->i$费用为$0$的边

    要么是经过拆除边

    不可能出现“行上拆掉了列上没拆掉”的情况

    最后用合法最大流流量 - 费用就是一组解

    根据条件2判断是否可行即可

    注意:请使用高效的费用流算法

    Edmond-Karp算法可能会被某无良出题人造的毒瘤数据卡掉

    建议使用zkw费用流,稠密图和二分图跑的飞快

    这题建出来的图是一个二分图,所以你懂得

  • 相关阅读:
    由发货单批量生成发票时提示“连接失败”
    如何处理委托代销业务
    用友出纳通重装恢复
    如何查看用友通数据的版本
    出纳通如何重新年结?
    一致性错误导致
    销售出库单无法删除!
    用dos命令给系统用户添加用户组
    用友删除年度数据,删除帐套
    出纳通年结后如何查看过去的年度数据?
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/9471480.html
Copyright © 2011-2022 走看看