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,大小设置 ...
随机推荐
- 反射,hashlib模块,正则匹配,冒泡,选择,插入排序
一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数, ...
- php的异常和处理
常见错误处理类型 语法错误 环境错误 逻辑错误 常见错误级别 Deprecated 最低级别的错误 不推荐,不建议,使用一些过期函数的时候会出现,程序继续执行 Notice 通知级别的错误 使用一些未 ...
- Loadrunder之脚本篇——参数化在场景中的运用
Action() { lr_eval_string("{NewParam}"); lr_eval_string("{NewParam}"); return 0; ...
- OpenGL学习进程(3)第一课:初始化窗体
本节是OpenGL学习的第一个课时,下面介绍如何初始化一个窗体: (1)显示一个有蓝色背景的窗体: #include <GL/glut.h> #include <st ...
- FTP下载
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import ja ...
- python cookboo 文件与IO 函数
写出文本数据 g = open('test.txt', 'rt', newline='',encoding = 'utf-8', errors='replace') t是windows平台特有的所谓t ...
- InnoDB存储引擎内存缓冲池管理技术——LRU List、Free List、Flush List
InnoDB是事务安全的MySQL存储引擎,野山谷OLTP应用中核心表的首选存储引擎.他是基于表的存储引擎,而不是基于数据库的.其特点是行锁设计.支持MVCC.支持外键.提供一致性非锁定读,同时被设计 ...
- 【HackerRank】Median
题目链接:Median 做了整整一天T_T 尝试了各种方法: 首先看了解答,可以用multiset,但是发现java不支持: 然后想起来用堆,这个基本思想其实很巧妙的,就是维护一个最大堆和最小堆,最大 ...
- 【鸟哥的Linux私房菜】笔记1
Linux是什么 从操作系统与cpu架构关系到linux Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux ...
- PHP中的常见魔术方法功能作用及用法实例
概述 在面向对象编程中,PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利.PHP中的魔术方法通常以__(两个下划线)开始,并且不需要显示的调用而是由某种特定的条件出发. 开始之前 在总结 ...