[bzoj 4808]马
众所周知,马后炮是中国象棋中很厉害的一招必杀技。”马走日字”。本来,如果在要去的方向有别的棋子挡住(俗称”蹩马腿”),则不允许走过去。为了简化问题,我们不考虑这一点。马跟马显然不能在一起打起来,于是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]马相关推荐
- 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 马
题面 以前写过的题,翻出来学习网络流写二分图匹配,因为复杂度更优秀,$Dinic$是$O(sqrt(n)m)$哒~ 原点向左部点连流量为$1$的边,左部点向对应右部点连流量为$1$的边,右部点向汇点连 ...
- bzoj 4808: 马【匈牙利算法】
网格图黑白染色,然后能互相攻击到的点之间连边,跑匈牙利算法最大匹配,答案是好点个数-最大匹配(最大独立集) 注意pao的时候只从一种颜色的格子统计即可 #include<iostream> ...
- BZOJ 4808 二分图最大点独立集
4808: 马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗 称"蹩马腿"), ...
- [BZOJ 1193] 马步距离
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1193 Solution: 能立刻看出贪心算法,但发现在小数据时明显不适用 于是我们采取大 ...
- BZOJ P4808 马
又是一道水题,直接黑白点染色建一个二分图然后求一个最大点独立集即可 代码不给了 话说这一堆系列题怎么都是只改了一下题面啊,尴尬
- BZOJ 4808 二分图最大独立集
思路: 棋盘是个二分图 那就把一个可以走的白点 向所有可以走的黑点连边 跑一个最大匹配 (匹配上了就代表这两个点不能共存) 最大独立集=sum-最大匹配 //By SiriusRen #incl ...
最新文章
- H5打开预览PDF,PPT等文件
- 随机矩阵理论_MIMO 信道容量的理论模型
- python基础知识点大全-【python基础学习】基础重点难点知识汇总
- ios mdm更新应用_因使用MDM下架的家长控制应用OurPact重返App Store
- Linux stat命令显示文件的状态信息
- 推荐3个C++系统项目!初级开发者必学!
- 传输层 :TCP/UDP 协议(用于封装接口)
- JavaScript校验网址
- rsync的原理和安装使用及配制详解(三)(转)
- [译] PHP 的变量实现(给PHP开发者的PHP源码-第三部分)
- Chrome Firefox for Linux 直达下载链接
- 2021-06-18
- 微信群管理机器人php,一个人管理微信群太累,试试可以自动管群微信机器人
- html颜色渐变配色方案,css网站推荐 渐变色配色方案 - 小俊学习网
- Python利用 Django开发网站
- Ubuntu 下查看图片
- 【JS】阮一峰js教程总结
- Google hacking(谷歌语法)
- springboot-分布式实例开发 (六)
- Argument for @NotNull parameter ‘quickFixes‘ of com/intellij/ope