bzoj 4930: 棋盘
Description
Input
Output
#include<cstdio>
#include<algorithm>
#include<queue>
const int inf=0x3f3f3f3f;
int n,q,id[][][],id1=,id2=,as[],ap=,d[],l[];
char s[][];
int es[],enx[],ev[],e0[],ep=,lt;
void ae(int a,int b){
es[ep]=b;enx[ep]=e0[a];ev[ep]=;e0[a]=ep++;
es[ep]=a;enx[ep]=e0[b];ev[ep]=;e0[b]=ep++;
}
bool cmp(int a,int b){
return d[a]<d[b];
}
int q0[],ed[],tk=;
std::queue<int>q1;
void mins(int&a,int b){if(a>b)a=b;}
void cal(int w){
if(w>id1)mins(lt,l[w]+d[w]);
for(int i=e0[w];i;i=enx[i])if(ev[i]){
int u=es[i];
if(l[u]>l[w])l[u]=l[w],q1.push(u);
}
}
int dfs(int w){
if(ed[w]==tk)return ;
ed[w]=tk;
if(w>id1&&l[w]+d[w]==lt){
++d[w];
return ;
}
for(int i=e0[w];i;i=enx[i])if(ev[i]&&l[es[i]]==l[w]&&dfs(es[i])){
ev[i]=,ev[i^]=;
return ;
}
return ;
}
bool cal(){
lt=inf;
for(int i=;i<=id1;++i)q0[i]=i,l[i]=d[i];
for(int i=id1+;i<=id2;++i)l[i]=inf;
std::sort(q0+,q0+id1+,cmp);
int qp=;
while(){
if(qp<=id1){
int w=q0[qp];
if(l[w]!=d[w]){++qp;continue;}
if(q1.size()&&l[q1.front()]<l[w])cal(q1.front()),q1.pop();
else cal(w),++qp;
}else if(q1.size())cal(q1.front()),q1.pop();
else break;
}
int flow=;
for(int i=;i<=id1;++tk,++i)if(l[i]==d[i]&&dfs(i))++flow,++d[i];
for(int i=;i<=flow;++i)++ap,as[ap]=as[ap-]+lt;
return flow;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%s",s[i]+);
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
if(s[i][j]!='.')continue;
id[i][j][]=s[i-][j]=='.'?id[i-][j][]:++id1;
id[i][j][]=s[i][j-]=='.'?id[i][j-][]:++id2;
}
}
for(int i=;i<=n;++i){
for(int j=;j<=n;++j)if(s[i][j]=='.'){
ae(id[i][j][],id1+id[i][j][]);
}
}
id2+=id1;
while(cal());
for(scanf("%d",&q);q;--q){
int x;
scanf("%d",&x);
printf("%d\n",as[x]);
}
return ;
}
bzoj 4930: 棋盘的更多相关文章
- BZOJ 1057 棋盘制作
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴 ...
- BZOJ 1057 棋盘制作(最大01相间子矩阵)
求最大01相间子矩阵可以转换为求最大全0子矩阵.只需把棋盘(x+y)为奇数的取反,而该问题可以用经典的悬线法O(n^2)的求解. 悬线法呢. 首先定义b[i][j],为a[i][j]向上的最大连续0的 ...
- 【以前的空间】bzoj [ZJOI2007]棋盘制作
具体可以去跪<浅谈用极大化思想解决最大子矩形问题>(p.s. 蒟蒻跪了还是很晕,不过想到之前usaco好像是最后一章的一道题……看了下代码顿然醒悟) 也就是如果用o(nm)的方法维护一个极 ...
- 2877: [Noi2012]魔幻棋盘 - BZOJ
DescriptionInput 第一行为两个正整数N,M,表示棋盘的大小. 第二行为两个正整数X,Y,表示棋盘守护者的位置. 第三行仅有一个正整数T,表示棋盘守护者将进行次操作. 接下来N行,每行有 ...
- 1057: [ZJOI2007]棋盘制作 - BZOJ
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴 ...
- bzoj 2706: [SDOI2012]棋盘覆盖 Dancing Link
2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 255 Solved: 77[Submit][Status] ...
- BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )
状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) ------------------------------------------------------- ...
- bzoj 1057: [ZJOI2007]棋盘制作 单调栈
题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 1019[Submit] ...
- BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )
对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...
随机推荐
- 编译EXE文件的时候pcap编译不进去。 pyinstaller pcap pypcap 报错
如果生成的exe源码中有import pcap 那么你目标机上就要先装npcap 并勾选winpcap API. 然后就不出这个问题了. 暂时的办法是第一个exe不包含import pcap.自检np ...
- Flask初级(五)flash在模板中使用继承,模板的模板
Project name :Flask_Plan templates:templates static:static 继续上一篇文章. 我们不希望每个页面都写一遍引入js,css,导航条……………… ...
- Java多线程安全问题
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 【转】EDNS
转自:https://www.cnblogs.com/cobbliu/p/3188632.html 随着业务的复杂化和多样化,RFC1035中定义的DNS消息格式和它支持的消息内容已经不足以满足一些D ...
- JavaScript 自定义文本框光标——初级版
文本框(input或textarea)的光标无法修改样式(除了通过color修改光标颜色).但笔者希望个人创建自己的网站时,文本框的光标有属于自己的风格.所以,尝试模拟文本框的光标,设计有自己风格的光 ...
- 全球DEM数据GMT绘制
http://gmt-china.org/download/
- (翻译)Angular 1.3中的验证器管道
原文地址:VALIDATORS PIPELINE IN ANGULAR 1.3 我们知道在Angular中操作表单是很爽的.因为Angular本身的作用域模型,我们总能在相应的作用域中获取到表单当前的 ...
- Arrays类的分析及使用
1. Arrays类介绍 Arrays类是Java API中提供的类,在java.util包中,此类包含用来操作数组的各种方法,比如排序和搜索,在这个类中如果指定数组引用为null,则此类方法都会抛 ...
- Android RIL的java框架
Android RIL的Java部分也被分为了两个模块,RIL模块与Phone模块.其中RIL模块负责进行请求以及相应的处理,它将直接与RIL的原声代码进行通信.而Phone模块则向应用程序开发者提供 ...
- HDU 6188:Duizi and Shunzi(贪心)(广西邀请赛)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188 题意 有n个数字,每个数字小于等于n,两个相同的数字价值为1,三个连续的数字价值为1 .问这n个 ...