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费用流,稠密图和二分图跑的飞快
这题建出来的图是一个二分图,所以你懂得
bzoj2673的更多相关文章
- Bzoj2673 3961: [WF2011]Chips Challenge 费用流
国际惯例题面:如果我们枚举放几个零件的话,第二个限制很容易解决,但是第一个怎么办?(好的,这么建图不可做)考虑我们枚举每行每列最多放几个零件t,然后计算零件总数sum.这样如果可行的话,则有t*B&l ...
- BZOJ2673 [Wf2011]Chips Challenge 费用流 zkw费用流 网络流
https://darkbzoj.cf/problem/2673 有一个芯片,芯片上有N*N(1≤N≤40)个插槽,可以在里面装零件. 有些插槽不能装零件,有些插槽必须装零件,剩下的插槽随意. 要求装 ...
- [基本操作] Mobius 反演, Dirichlet 卷积和杜教筛
Dirichlet 卷积是两个定义域在正整数上的函数的如下运算,符号为 $*$ $(f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d})$ 如果不强调 $n$ 可简写为 $ ...
随机推荐
- websocket-client connection( Long-lived )
参考:https://pypi.python.org/pypi/websocket-client/ import websocket import thread import time def on_ ...
- C语言重要概念汇总
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...
- Spark Streaming和Kafka整合开发指南(二)
在本博客的<Spark Streaming和Kafka整合开发指南(一)>文章中介绍了如何使用基于Receiver的方法使用Spark Streaming从Kafka中接收数据.本文将介绍 ...
- poj1206(dp)
题目链接:http://poj.org/problem?id=1260 Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissio ...
- 【selenium+Python unittest】之发送带中文附件的邮箱
完整原码如下: import smtplib from email.mime.text import MIMEText #from email.header import Header from em ...
- wpf自定义colorpicker
自定义colorpicker <ObjectDataProvider MethodName="GetType" ObjectType="{x:Type system ...
- Windows App开发之经常使用控件与应用栏
控件的属性.事件与样式资源 怎样加入控件 加入控件的方式有多种,大家更喜欢以下哪一种呢? 1)使用诸如Blend for Visual Studio或Microsoft Visual Studio X ...
- jquery在网页实时显示时间;
1.定义一个显示时间的位置 <div id="shijian"> </div> 2.jquery代码 function showTime() { var c ...
- ubuntu 安装codeblocks
本文转载于:http://blog.csdn.net/i_fuqiang/article/details/9749225 1.安装gcc: sudo apt-get install build-ess ...
- android菜鸟学习笔记17----Android数据存储(一)文件读写
假如有如下需求,要求能够记录用户输入的用户名和密码,下次登录时,能直接获取之前保存的用户名密码,并在相应的EditText中显示. 要保存用户输入的数据,最先想到的应该就是文件读写了. 通过对andr ...