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);
}

最新文章

  1. [LeetCode] Sort Characters By Frequency 根据字符出现频率排序
  2. Linux字符串截取命令
  3. Pinyin 输入法安装 opensuse 13 gnome
  4. 公钥、私钥、CA认证、数字签名、U盾
  5. 苹果开发——App内购以及验证store的收据(二)
  6. MDK5.01百度云下载,安装微软雅黑混合字体,字体效果很棒,解决显示中文的BUG
  7. jQuery zxxbox弹出框插件(v3.0)
  8. Zookeeper 1、Zookeeper 定义与工作原理
  9. openstack私有云布署实践【15 创建租户网络+实例】
  10. C++builder编译别人工程报错
  11. 使用spol导出exce
  12. UNIX环境高级编程——实现uid to name
  13. 6-使用requests库封装类处理get/post请求
  14. flink source code
  15. 从hive导出数据到mysql
  16. [UE4]动态改变UniFormGird子控件的row属性
  17. JS----addEventListener()
  18. mysql数据库导出CSV乱码问题
  19. 蓝桥杯 ALGO-2:最大最小公倍数
  20. Ubuntu 下如何查看已安装的软件

热门文章

  1. active scaffold
  2. extern &quot;C&quot; 有关问题
  3. iOS 关于 Missing iOS Distribution signing identity for.... 等 打包 校验 出现的事故 处理经验
  4. 每天一个Linux命令(61)killall命令
  5. excel中如何取消自动超链接?
  6. PCIE phy和控制器
  7. python日志操作logging
  8. struts2实现文件的上传和下载实例[转]
  9. 【转】Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
  10. BZOJ2764 [JLOI2011]基因补全