bzoj 4808: 马【匈牙利算法】
网格图黑白染色,然后能互相攻击到的点之间连边,跑匈牙利算法最大匹配,答案是好点个数-最大匹配(最大独立集)
注意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: 马【匈牙利算法】相关推荐
- BZOJ 4808(马-二分图最大独立集)
4808: 马 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 111 Solved: 46 [Submit][Status][Discuss] Des ...
- BZOJ 4808: 马(二分图最大点独立集)
http://www.lydsy.com/JudgeOnline/problem.php?id=4808 题意: 思路: 这图中的两个马只能选一个,二选一,很像二分图吧,对能互吃的两个棋子连线,在所选 ...
- bzoj 4808: 马
题意: 在图上放最多马,使它们不能相互攻击. 题解: 同bzoj 攻击装置.3175 一开始狂T,抄了个偏移量竟然快了10几倍? 玄学-- code: #include<cstdio> # ...
- [bzoj 4808]马
众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩马腿"),则不允许走过去.为了简化问题,我们不考虑这 ...
- 解题:BZOJ 4808 马
题面 以前写过的题,翻出来学习网络流写二分图匹配,因为复杂度更优秀,$Dinic$是$O(sqrt(n)m)$哒~ 原点向左部点连流量为$1$的边,左部点向对应右部点连流量为$1$的边,右部点向汇点连 ...
- BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法
刚学了匈牙利正好练练手(我不会说一开始我写错了)(怕不是寒假就讲了可是我不会) 把人看做左部点,床看作右部点 建图:(!!在校相当于有床,不在校相当于没有床 但是要来学校) 1.在校的 不走的人 自己 ...
- 378. 骑士放置——最大独立集+匈牙利算法
给定一个 N×M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日&qu ...
- BZOJ 4808 二分图最大点独立集
4808: 马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗 称"蹩马腿"), ...
- 多目标跟踪卡尔曼滤波和匈牙利算法
多目标跟踪关联匹配算法(匈牙利算法和KM算法原理讲解和代码实现) 目录 多目标跟踪关联匹配算法 多目标跟踪关联匹配算法(匈牙利算法和KM算法原理讲解和代码实现) 0.多目标跟踪算法流程 1.卡尔曼滤波 ...
最新文章
- angular2+ 自定义pipe管道实例--定义全局管道及使用
- 硬核!手写一个优先队列
- ogm session_带有Hibernate OGM的NoSQL –第一部分:持久化您的第一个实体
- 状态模式 有限状态机_有限状态机解释
- 网络工程师考试模拟器
- 安卓连接java_从零学习安卓自动化(java+appium方向):手机连接Appium(二)
- restapi(3)- MongoDBEngine : MongoDB Scala编程工具库
- php 写入.csv文件注意点
- 业余草教你简单 4 步搞定 SpringBoot 整合 Shiro!
- xshell如何登陆数据库_Xshell怎么连接数据库?
- matlab与信道编码,基于MATLAB的信道编码.doc
- 电力设备管理杂志电力设备管理杂志社电力设备管理编辑部2022年第14期目录
- 分享雷柏无线鼠标接收器损坏后的更换方法
- 最新论文笔记(+9):Achieving Secure Search over Encrypted Data for e-Commerce A Blockchain Approach/ToIT2020
- spring接管mybatis
- sap 修改主机名过程
- 开源海思开发板(HIVIEW开发板)
- Spring入门自学
- EarlyStopping技术
- win7下安装netmeeting