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,大小设置 ...
随机推荐
- iOS 几种常用的 crash log 崩溃信息调试方法
前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...
- 快速查找文件——Everything
Everything Search Engine Locate files and folders by name instantly. Small installation file Clean a ...
- Oracle网络服务管理与配置
一.Oracle网络服务概述 1.网络解决方案. (1)可连接性:在Oracle中,由Oracle net组件负责在客户端应用程序与数据服务器之间创建会话.维护会话连接和数据传输. (2)可管理性: ...
- library-type:fr-unstanded vs fisrt-stand vs second-stanrd
建库时是否是链特异性建库. Tophat2: --library-type The default is unstranded (fr-unstranded). If either fr-firsts ...
- 12个提问频率最高的php面试题
你是否正在准备寻找一份PHP开发的工作,并且也在寻找一些关于PHP的面试题及答案?本文为大家分享了一些被提问频率最高的11个PHP面试题,以及对应的常规回答,每个公司都有自己的面试标准,面试和问题是完 ...
- Qt编译器
有两种,MSVC和MINGW Qt 中有两种方式编译,一种是MinGW ,另一种MSVC. MSVC是指微软的VC编译器: MingGW是指是Minimalist GNU on Windows的缩写. ...
- shell脚本:批量修改文件名
参考链接1:shell脚本:批量修改文件名(删除文件名中字符) 参考链接2:linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 ) 参考链接3:每天一个linux ...
- PHP开发框架
利用PHP开发框架可以帮助你编写干净和可重用的代码.PHP开发框架遵循MVC设计模式,以确保能够明确区分逻辑和演示文稿.但是有关PHP框架的争论也不少,这是因为有的人喜欢性能,有的人喜欢文档,而有的人 ...
- python进阶02
1.import导入模块 import sys sys.path:显示的是:从显示目录中查找要导入的模块文件. 程序执行时导入模块路径:sys.path.append('/home/itcast/xx ...
- 区间dp的感悟
学区间dp似乎也很久了...对区间dp的通用模型都了解了一些 但是做题还是很坑 上了一点难度的题基本想不出什么思路.. 目前的做题方式就是看题 想一会发现自己不会做 看题解 好巧妙啊 理解后写一发.. ...