众所周知,马后炮是中国象棋中很厉害的一招必杀技。”马走日字”。本来,如果在要去的方向有别的棋子挡住(俗称”蹩马腿”),则不允许走过去。为了简化问题,我们不考虑这一点。马跟马显然不能在一起打起来,于是rly在一天再次借来了许多许多的马在棋盘上摆了起来……但这次,他实在没兴趣算方案数了,所以他只想知道在N×M的矩形方格中摆马使其互不吃到的情况下的最多个数。但是,有一个很不幸的消息,rly由于玩得太Happy,质量本来就不好的棋盘被rly弄坏了,不过幸好只是破了其中的一些格子(即不能再放子了),问题还是可以继续解决的。

这道题同bzoj 3175一样,但问题是如果是普通的二分图匹配的话,这里就不会像bzoj 3175那样A,会T。要加什么黑白染色,但本蒟蒻不会啊。然后神奇地发现了改了一下dx,dy数组内数字的位置,就会快很多。太玄学了。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
using namespace std;
struct node
{int x,y,next;
}a[400010];int len,last[40010];
void ins(int x,int y)
{len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;
}
int dx[8]={-1,-2, 1, 2,-1,-2,1,2};
int dy[8]={-2,-1,-2,-1, 2, 1,2,1};
int chw[40010],sd;
int s[210][210],match[40010];
int sp[210][210];
bool find_muniu(int x)
{for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(chw[y]!=sd){chw[y]=sd;if(match[y]==0 || find_muniu(match[y])==true){match[y]=x;return true;}}}return false;
}
int main()
{int n,m,ss=0;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&s[i][j]);if(s[i][j]==0)sp[i][j]=++ss;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(s[i][j]==0){   for(int k=0;k<8;k++){int xx=i+dx[k],yy=j+dy[k];if(xx>=1 && xx<=n && yy>=1 && yy<=m && s[xx][yy]==0)ins(sp[i][j],sp[xx][yy]);}}}}int ans=0;for(int i=1;i<=ss;i++){sd++;if(find_muniu(i)==true)ans++;}printf("%d\n",ss-ans/2);return 0;
}

[bzoj 4808]马相关推荐

  1. BZOJ 4808(马-二分图最大独立集)

    4808: 马 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 111 Solved: 46 [Submit][Status][Discuss] Des ...

  2. BZOJ 4808: 马(二分图最大点独立集)

    http://www.lydsy.com/JudgeOnline/problem.php?id=4808 题意: 思路: 这图中的两个马只能选一个,二选一,很像二分图吧,对能互吃的两个棋子连线,在所选 ...

  3. bzoj 4808: 马

    题意: 在图上放最多马,使它们不能相互攻击. 题解: 同bzoj 攻击装置.3175 一开始狂T,抄了个偏移量竟然快了10几倍? 玄学-- code: #include<cstdio> # ...

  4. 解题:BZOJ 4808 马

    题面 以前写过的题,翻出来学习网络流写二分图匹配,因为复杂度更优秀,$Dinic$是$O(sqrt(n)m)$哒~ 原点向左部点连流量为$1$的边,左部点向对应右部点连流量为$1$的边,右部点向汇点连 ...

  5. bzoj 4808: 马【匈牙利算法】

    网格图黑白染色,然后能互相攻击到的点之间连边,跑匈牙利算法最大匹配,答案是好点个数-最大匹配(最大独立集) 注意pao的时候只从一种颜色的格子统计即可 #include<iostream> ...

  6. BZOJ 4808 二分图最大点独立集

    4808: 马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗 称"蹩马腿"), ...

  7. [BZOJ 1193] 马步距离

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1193 Solution: 能立刻看出贪心算法,但发现在小数据时明显不适用 于是我们采取大 ...

  8. BZOJ P4808 马

    又是一道水题,直接黑白点染色建一个二分图然后求一个最大点独立集即可 代码不给了 话说这一堆系列题怎么都是只改了一下题面啊,尴尬

  9. BZOJ 4808 二分图最大独立集

    思路: 棋盘是个二分图 那就把一个可以走的白点  向所有可以走的黑点连边 跑一个最大匹配   (匹配上了就代表这两个点不能共存) 最大独立集=sum-最大匹配 //By SiriusRen #incl ...

最新文章

  1. python从入门到实践回顾——字典
  2. 学python用哪个软件-学python要准备什么软件-问答-阿里云开发者社区-阿里云
  3. nginx启动初始化过程(二)
  4. JavaScript原型与原型链(总结篇)
  5. cop2000计算机组成原理,COP2000计算机组成原理实验系统
  6. 这三种策略可以帮助女性在科技领域蓬勃发展
  7. solaris下修改 IPMP 配置
  8. 信息学奥赛一本通 2072:【例2.15】歌手大奖赛
  9. Flutter mac 环境搭建 最简教程
  10. js 正则判断用户是否输入表情
  11. ECMAScript 6 + Babel
  12. sql和mysql同时配置_jfinal同时配置mssql和mysql混动数据源
  13. Problem A: 时间类的拷贝和整体读写
  14. 复制构造函数被调用的3种情况
  15. mysql单表查询怎么做_mysql单表查询
  16. Mutisim电路仿真的应用(有源低通滤波器的设计)
  17. [Codeforces 894E] Ralph and Mushrooms
  18. Python技术练习------自动化处理费用表
  19. MTK功能机ATA导入
  20. C语言邮箱名字用什么存储,用c++定义一个描述学生通讯录的类数据成员包括姓名学校电话号码和邮箱...

热门文章

  1. Unity 物理系统 -- 刚体简介
  2. ESP32-C3通过MQTT协议把温湿度上传到阿里云物联网平台
  3. display的各种属性
  4. 计算机硬件故障诊断的原则,计算机常见故障检测的一般原则是什么
  5. APPDynamics APM性能监控软件
  6. hdu 4466 Triangle (数学)
  7. TFS导出工作项、bug,形成excel文件
  8. python验证身份证真伪_验证身份证的真伪,博客系统、个人博客、PHP、Linux、MySQL、python、前端技术、WEB知识...
  9. 《Verilog数字系统设计教程》夏宇闻 第四版思考题答案(第3章)
  10. php代码应该这样写