• 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费用流,稠密图和二分图跑的飞快

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

  • 相关阅读:
    Python综合学习 python入门学习 python速成
    博客建设
    文献搜索方法
    Mac效率工具集合
    Mac High Sierra 三步搞定安装Eclipes
    Mac High Sierra一步搞定Mysql安装
    Mac中使用的建模工具/流程图制作
    R语言的安装以及入门
    (一)linux基本的操作命令
    小程序canvas简单电子签名
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/9471480.html
Copyright © 2020-2023  润新知