BZOJ4930: 棋盘
BZOJ4930: 棋盘
https://lydsy.com/JudgeOnline/problem.php?id=4930
分析:
- 基本上就是游戏那道题加上费用流了,所以没啥好说的。
- 记得两边都是拆边。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
#define inf 0x3f3f3f3f
#define N 2550
#define M 500050
typedef double f2;
namespace EK {
const int S=N-1,T=N-2;
int head[N],to[M],nxt[M],flow[M],val[M],cnt=1;
int dis[N],Q[N],path[N],vis[N];
inline void add(int u,int v,int f,int c) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; flow[cnt]=f; val[cnt]=c;
to[++cnt]=u; nxt[cnt]=head[v]; head[v]=cnt; flow[cnt]=0; val[cnt]=-c;
}
bool spfa() {
memset(path,0,sizeof(path));
memset(dis,0x3f,sizeof(dis));
int l=0,r=0;
Q[r++]=S; dis[S]=0;
while(l!=r) {
int x=Q[l++]; if(l==S) l=0;
int i; vis[x]=0;
for(i=head[x];i;i=nxt[i]) if(dis[to[i]]>dis[x]+val[i]&&flow[i]) {
dis[to[i]]=dis[x]+val[i]; path[to[i]]=i^1;
if(!vis[to[i]]) {
vis[to[i]]=1; Q[r++]=to[i]; if(r==S) r=0;
}
}
}
return path[T]!=0;
}
pair<int,int> ek() {
int minc=0,maxf=0;
while(spfa()) {
int nf=inf;
int i;
for(i=T;i!=S;i=to[path[i]]) {
nf=min(nf,flow[path[i]^1]);
}maxf+=nf;
for(i=T;i!=S;i=to[path[i]]) {
flow[path[i]^1]-=nf;
flow[path[i]]+=nf;
minc+=nf*val[path[i]^1];
}
}
return make_pair(minc,maxf);
}
}
int n,bl[2][55][55],m,ans[2550];
char mp[55][55];
int main() {
using namespace EK;
scanf("%d",&n);
int i,j,k;
for(i=1;i<=n;i++) scanf("%s",mp[i]+1);
for(i=1;i<=n;i++) {
for(j=1;j<=n;j++) {
if(mp[i][j]=='#') {continue;}
int st=j;
for(;j<n&&mp[i][j+1]=='.';j++) ;
m++;
for(k=st;k<=j;k++) bl[0][i][k]=m;
for(k=1;k<=n;k++) add(S,m,1,k-1);
}
}
for(j=1;j<=n;j++) {
for(i=1;i<=n;i++) {
if(mp[i][j]=='#') {continue;}
int st=i;
for(;i<n&&mp[i+1][j]=='.';i++) ;
m++;
for(k=st;k<=i;k++) bl[1][k][j]=m;
for(k=1;k<=n;k++) {
add(m,T,1,k-1);
}
}
}
for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(mp[i][j]=='.') {
add(bl[0][i][j],bl[1][i][j],1,0);
}
int now=1;
int minc=0;
while(spfa()) {
int nf=inf;
int i;
for(i=T;i!=S;i=to[path[i]]) {
nf=min(nf,flow[path[i]^1]);
}
for(i=T;i!=S;i=to[path[i]]) {
flow[path[i]^1]-=nf;
flow[path[i]]+=nf;
minc+=nf*val[path[i]^1];
}
ans[now]=minc; now+=1;
}
int q;
scanf("%d",&q);
while(q--) {
scanf("%d",&k);
printf("%d\n",ans[k]);
}
}
BZOJ4930: 棋盘的更多相关文章
- 【BZOJ4930】棋盘 拆边费用流
[BZOJ4930]棋盘 Description 给定一个n×n的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置(x,y),(u,v)能互相攻击当前仅 当满足以下两个条件: 1:x=u或y ...
- 【bzoj4930】棋盘 费用流
题目描述 给定一个n×n的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置(x,y),(u,v)能互相攻击当前仅 当满足以下两个条件: 1:x=u或y=v 2:对于(x,y)与(u,v)之间 ...
- TYVJ1035 棋盘覆盖
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩 ...
- POJ 1321 棋盘问题(dfs)
传送门 棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38297 Accepted: 18761 Descri ...
- 设计一个自动生成棋盘格子的JS小程序
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- BZOJ1057[ZJOI2007]棋盘制作 [单调栈]
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ...
- 【ZJOI2007】棋盘制作 BZOJ1057
Description 国 际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方 阵,对应八八六十四卦,黑白对 ...
- Unity手撸2048小游戏——自动生成4*4棋盘
1.新建文件夹,命prefabs,将刚刚做成的Chessman拖入该文件下,做成预制体 2.删除panel下的Chessman 3.在panel下,新建一个空对象,命名为Chessboard,大小设置 ...
随机推荐
- css小知识---input输入块
对于如下的界面,介绍一种实现方式. 可以将整个界面分为三块,左中右.通过display: inline-block;和float: right;左右浮动效果实现. 代码如下: <!DOCTYPE ...
- $《第一行代码:Android》读书笔记——第2章 Activity
(一)创建活动 1.创建活动类 创建没有Activity的项目,发现src文件夹是空的,手动创建一个包com.jyj.demo1,在包中添加一个名为MainActivity的class,该MainAc ...
- 计算机网络概述---OSI参考模型
应用层:所有能产生网络流量的程序,例如:qq等,txt记事本没有产生流量,所以不属于应用层: 表示层:在传输之前对应用层的数据进行加工或处理,例如:加密.压缩.传视频时二进制,传文档时ASCII码 等 ...
- Java数据类型 及 转换原则
一.数据类型分类:主要分为 基本类型.引用类型两大类: 二.基本类型 转换原则 1.类型转换主要在在 赋值.方法调用.算术运算 三种情况下发生. a.赋值和方法调用 转换规则:从低位类型到高位类型自动 ...
- Java智能图表类库JChartLib使用介绍
http://www.codeceo.com/article/java-jchartlib.html JChartLib是一款基于Java的智能图表类库,JChartLib不仅有着漂亮的外观,而且支持 ...
- eclipse修改项目默认编码为UTF-8
1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧 Text file encodin ...
- 使用concurrent.futures和ProcessPoolExecutor来替代线程和进程
concurrent.futures和ProcessPoolExecutor这两个类实现的借口分别在不同的线程或进程中执行可调用的对象,这两个类在内部维护者一个工作线程或进程池,以及要执行的队列,这两 ...
- RequestMapping请求映射方式
1.标准映射 规则: 1) @RequestMapping可以设置在类上,也可以设置在方法上 2) 请求的映射规则是:类上的RequestMapping + 方法上的RequestMapping 3) ...
- Yum 命令语法
一.Yum 命令格式: yum <options> <command><package...> 二.参数说明 1.options: 1)-y:如果在工作过程中如要使 ...
- 虚拟机CentOS7网络配置
*关于查看IP信息 window中是 ipconfig Linux一般都是 ifconfig 不过CentOS7中 这个命令发生了更改 :ip addr 设置网络 再新建虚拟机向导过程中,有一步[网 ...