BZOJ4808: 马
BZOJ4808: 马
https://lydsy.com/JudgeOnline/problem.php?id=4808
分析:
- 黑白染色,求二分图最大匹配即可。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <set>
#include <vector>
#include <cmath>
using namespace std;
#define N 40050
#define M 500050
#define inf 0x3f3f3f3f
const int S=N-1,T=N-2;
int head[N],to[M],nxt[M],flow[M],cnt=1,n,m;
int Q[N],dep[N];
inline void add(int u,int v,int f) {
	to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; flow[cnt]=f;
	to[++cnt]=u; nxt[cnt]=head[v]; head[v]=cnt; flow[cnt]=0;
}
bool bfs() {
	memset(dep,0,sizeof(dep));
	int l=0,r=0;
	Q[r++]=S; dep[S]=1;
	while(l<r) {
		int x=Q[l++],i;
		for(i=head[x];i;i=nxt[i]) if(!dep[to[i]]&&flow[i]) {
			dep[to[i]]=dep[x]+1; if(to[i]==T) return 1; Q[r++]=to[i];
		}
	}return 0;
}
int dfs(int x,int mf) {
	int i,nf=0;
	if(x==T) return mf;
	for(i=head[x];i;i=nxt[i]) if(dep[to[i]]==dep[x]+1&&flow[i]) {
		int tmp=dfs(to[i],min(mf-nf,flow[i]));
		if(!tmp) dep[to[i]]=0;
		nf+=tmp; flow[i]-=tmp; flow[i^1]+=tmp;
		if(nf==mf) break;
	}
	return nf;
}
int dinic() {
	int mxf=0,f=0;
	while(bfs()) {
		while((f=dfs(S,inf))) mxf+=f;
	}
	return mxf;
}
int idx[205][205],c[205][205];
int tx[]={-2,-1,1,2,2,1,-1,-2};
int ty[]={1,2,2,1,-1,-2,-2,-1};
int main() {
	scanf("%d%d",&n,&m);
	int i,j,k;
	for(i=1;i<=n;i++) {
		for(j=1;j<=m;j++) {
			idx[i][j]=++idx[0][0];
			c[i][j]=(i+j)&1;
		}
	}
	int x,ans=0;
	for(i=1;i<=n;i++) for(j=1;j<=m;j++) {
		scanf("%d",&x);
		if(!x) {
			if(!c[i][j]) add(S,idx[i][j],1);
			else add(idx[i][j],T,1);
			ans++;
		}
	}
	for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(!c[i][j]) {
		int x=i,y=j;
		for(k=0;k<8;k++) {
			int dx=x+tx[k], dy=y+ty[k];
			if(dx>=1&&dx<=n&&dy>=1&&dy<=m) {
				add(idx[x][y],idx[dx][dy],1);
			}
		}
	}
	ans-=dinic();
	printf("%d\n",ans);
}
BZOJ4808: 马的更多相关文章
- bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 (黑白染色+最小割)
		bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 题目:传送门 简要题意: 和n皇后问题差不多,但是这里是每个棋子走日子,而且有些格子不能放棋子.求最多能放多少个棋 ... 
- BZOJ4808马——二分图最大独立集
		题目描述 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗 称"蹩马腿"),则不允许走过去.为了简化问题, ... 
- 【bzoj4806~bzoj4808】炮车马后——象棋四连击
		bzoj4806——炮 题目传送门:bzoj4806 这种题一看就是dp...我们可以设$ f[i][j][k] $表示处理到第$ i $行,有$ j $列没放炮,$ k $列只放了一个炮.接着分情况 ... 
- 【BZOJ4808/3175】马/[Tjoi2013]攻击装置 最小割
		[BZOJ4808]马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩马腿" ... 
- 【bzoj4808】【马】二分图最大点独立集+简单感性证明
		(上不了p站我要死了,侵权度娘背锅) Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩 ... 
- 使用AWS亚马逊云搭建Gmail转发服务(三)
		title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ... 
- 隐马尔科夫模型python实现简单拼音输入法
		在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ... 
- 神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观
		前言 哦,不搞SQL了么,当然会继续,周末会继续更新,估计写完还得几十篇,但是我会坚持把SQL更新完毕,绝不会烂尾,后续很长一段时间没更新的话,不要想我,那说明我是学习新的技能去了,那就是学习英语,本 ... 
- 【NLP】揭秘马尔可夫模型神秘面纱系列文章(一)
		初识马尔可夫和马尔可夫链 作者:白宁超 2016年7月10日20:34:20 摘要:最早接触马尔可夫模型的定义源于吴军先生<数学之美>一书,起初觉得深奥难懂且无什么用场.直到学习自然语言处 ... 
随机推荐
- jdbc驱动jar导入eclipse
			在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java ... 
- Django 进阶篇之 Form验证
			Django Form验证 在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁 ... 
- iOS  系统认知 debug  distribution  release  和  #ifdef DEBUG
			debug:调试模式 有调试信息 线下 release: 无调试信息 经过了编译优化 发布 给用户使用的 线上模式 一般 工程项目 都是自带 上述两种配置结构 还有出现 distribution: ... 
- Linux Shell基础 环境变量
			环境变量 环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量.用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的 ... 
- ETL应用:一种一次获取一个平台接口文件的方法
			ETL应用场景中,若对端接口文件未能提供,任务会处于循环等待,直到对端提供为止,该方法极大的消耗了系统资源.为此想到了一种方法,一次获取一个平台的文件,实现思路如下: 1.第一次获取对端平台提供目录下 ... 
- 【HackerRank】Pairs
			题目链接:Pairs 完全就是Two Sum问题的变形!Two Sum问题是要求数组中和正好等于K的两个数,这个是求数组中两个数的差正好等于K的两个数.总结其实就是“骑驴找马”的问题:即当前遍历ar[ ... 
- gstreamer交叉编译
			gstreamer(0.10.36) ./configure --build=i686-linux --host=arm-linux --prefix=/opt/EmbedSky/gcc-4.6.2- ... 
- awk遇到windows 的^M
			windows在编辑的文档,在linux中显示会在行尾出现一个^M window下编辑的文档:末尾带^M$ linux下编辑的文档:末尾带$ awk中如果存在^M,则会限制print的输出列数(只能输 ... 
- Win32 API编程:WinMain无法重载函数或_tWinMain无法重载
			#include "windows.h" #include "tchar.h" int APIENTRY _tWinMain( HINSTANCE hInsta ... 
- 【转载】Android端百度地图API使用详解
			转载地址:http://www.cnblogs.com/rocomp/p/4994110.html 百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口 ... 
