博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4808马——二分图最大独立集
阅读量:5319 次
发布时间:2019-06-14

本文共 1348 字,大约阅读时间需要 4 分钟。

题目描述

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

输入

一行,两个正整数N和M。
接下来N行,每行M个数,要么为0,表示没坏,要么为1,表示坏了。
N<=200,M<=200

输出

一行,输出最多的个数。

样例输入

2 3
0 1 0
0 1 0

样例输出

2
 
 
  这道题和是一样的题,黑白染色之后跑二分图最大匹配,用矩阵大小-1的数目-二分图最大匹配数。
#include
#include
#include
#include
#include
using namespace std;int next[1000001];int to[1000001];int val[1000001];int head[1000001];int tot=1;int q[1000001];int n,k,m;int S,T;int ans;int x,y;int d[1000001];int c[1001][1001];const int dx[]={-2,-1,1,2,2,1,-1,-2};const int dy[]={1,2,2,1,-1,-2,-2,-1};void add(int x,int y,int v){ tot++; next[tot]=head[x]; head[x]=tot; to[tot]=y; val[tot]=v; tot++; next[tot]=head[y]; head[y]=tot; to[tot]=x; val[tot]=0;} bool bfs(int S,int T){ int r=0; int l=0; memset(q,0,sizeof(q)); memset(d,-1,sizeof(d)); q[r++]=S; d[S]=0; while(l
0&&fx<=n&&fy>0&&fy<=m&&c[fx][fy]!=-1) { add(c[i][j],c[fx][fy],0x3f3f3f); } } } } } dinic(); printf("%d",n*m-k-ans);}

转载于:https://www.cnblogs.com/Khada-Jhin/p/9301740.html

你可能感兴趣的文章
jQuery Colorbox弹窗插件使用教程小结、属性设置详解以及colorbox关闭
查看>>
spring boot 2.0 源码分析(三)
查看>>
多态的概念和作用//转载
查看>>
在Intellij IDEA或者PhpStorm下用X-debug调试PHP
查看>>
线性基
查看>>
C#中如何创建xml文件 增、删、改、查 xml节点信息
查看>>
MYSQL(三)
查看>>
点的双联通+二分图的判定(poj2942)
查看>>
commons-logging的使用
查看>>
.Net Memory Profiler入门
查看>>
汉子转拼音
查看>>
python-day71--django多表操作
查看>>
Linux 常用命令(Linux)
查看>>
Sublime Text 2中如何输入中文
查看>>
vs2015如何设置类或函数前不显示引用的数量
查看>>
PHP中str_replace和substr_replace有什么区别?
查看>>
洛谷 P1246 编码 题解
查看>>
利用intellijidea创建maven多模块项目
查看>>
SQLServer安装媒体不支持x86系统的问题
查看>>
Hive Streaming 追加 ORC 文件
查看>>