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

#include<iostream>
#include<cstdio>
using namespace std;
const int N=205,dx[]={2,2,-2,-2,-1,-1,1,1},dy[]={-1,1,-1,1,-2,2,-2,2};
int n,m,sum,h[N*N],cnt,id[N][N],a[N][N],tot,v[N*N],ti,lk[N*N],ans;
struct qwe
{int ne,to;
}e[N*N*8];
int read()
{int r=0,f=1;char p=getchar();while(p>'9'||p<'0'){if(p=='-')f=-1;p=getchar();}while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
void add(int u,int v)
{cnt++;e[cnt].ne=h[u];e[cnt].to=v;h[u]=cnt;
}
bool ok(int x,int y)
{return !a[x][y]&&x>=1&&x<=n&&y>=1&&y<=m;
}
bool zhao(int u)
{for(int i=h[u];i;i=e[i].ne)if(v[e[i].to]!=ti){v[e[i].to]=ti;if(!lk[e[i].to]||zhao(lk[e[i].to])){lk[e[i].to]=u;return 1;}}return 0;
}
int main()
{n=read(),m=read();for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=read(),id[i][j]=++tot,sum+=(1-a[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(!a[i][j]&&(i^j)&1)for(int k=0;k<8;k++)if(ok(i+dx[k],j+dy[k]))add(id[i][j],id[i+dx[k]][j+dy[k]]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(!a[i][j]&&(i^j)&1){ti++;if(zhao(id[i][j]))ans++;}printf("%d\n",sum-ans);return 0;
}

转载于:https://www.cnblogs.com/lokiii/p/9427489.html

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]马

    众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩马腿"),则不允许走过去.为了简化问题,我们不考虑这 ...

  5. 解题:BZOJ 4808 马

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

  6. BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法

    刚学了匈牙利正好练练手(我不会说一开始我写错了)(怕不是寒假就讲了可是我不会) 把人看做左部点,床看作右部点 建图:(!!在校相当于有床,不在校相当于没有床 但是要来学校) 1.在校的 不走的人 自己 ...

  7. 378. 骑士放置——最大独立集+匈牙利算法

    给定一个 N×M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日&qu ...

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

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

  9. 多目标跟踪卡尔曼滤波和匈牙利算法

    多目标跟踪关联匹配算法(匈牙利算法和KM算法原理讲解和代码实现) 目录 多目标跟踪关联匹配算法 多目标跟踪关联匹配算法(匈牙利算法和KM算法原理讲解和代码实现) 0.多目标跟踪算法流程 1.卡尔曼滤波 ...

最新文章

  1. angular2+ 自定义pipe管道实例--定义全局管道及使用
  2. 硬核!手写一个优先队列
  3. ogm session_带有Hibernate OGM的NoSQL –第一部分:持久化您的第一个实体
  4. 状态模式 有限状态机_有限状态机解释
  5. 网络工程师考试模拟器
  6. 安卓连接java_从零学习安卓自动化(java+appium方向):手机连接Appium(二)
  7. restapi(3)- MongoDBEngine : MongoDB Scala编程工具库
  8. php 写入.csv文件注意点
  9. 业余草教你简单 4 步搞定 SpringBoot 整合 Shiro!
  10. xshell如何登陆数据库_Xshell怎么连接数据库?
  11. matlab与信道编码,基于MATLAB的信道编码.doc
  12. 电力设备管理杂志电力设备管理杂志社电力设备管理编辑部2022年第14期目录
  13. 分享雷柏无线鼠标接收器损坏后的更换方法
  14. 最新论文笔记(+9):Achieving Secure Search over Encrypted Data for e-Commerce A Blockchain Approach/ToIT2020
  15. spring接管mybatis
  16. sap 修改主机名过程
  17. 开源海思开发板(HIVIEW开发板)
  18. Spring入门自学
  19. EarlyStopping技术
  20. win7下安装netmeeting

热门文章

  1. 【学习笔记】刚体角速度的唯一性问题
  2. 数据结构:串、数组和广义表
  3. python使用pyecharts展示中国各城市天气数据
  4. Android中圆形图的几种实现方式
  5. 【寒假每日一题】AcWing 4510. 寻宝!大冒险!
  6. 三菱d700变频器模拟量控制_浅谈三菱FR—D700变频器基本参数的设定
  7. linux下安装transmission下载种子
  8. 主流webservice框架整理
  9. 链路聚合VRRP(虚拟路由器冗余协议)
  10. 硬盘分区DG分区助手看不见硬盘