思路:由(i+j)为偶数的点向(i+j)为奇数的点建边。求一次最大匹配,若正好为空格数(不包含洞)的一半,即输出YES。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Maxn 1101
using namespace std;
int n,m,vi[Maxn],match[Maxn],graphic[Maxn][Maxn],map[][],N[Maxn],M[Maxn],x,y;
int dfs(int u)
{
int i;
for(i=;i<=y;i++)
{
if(!vi[M[i]]&&graphic[u][M[i]])
{
vi[M[i]]=;
if(match[M[i]]==-||dfs(match[M[i]]))
{
match[M[i]]=u;
return ;
}
}
}
return ;
}
int Pos(int i,int j)
{
return (i-)*n+j;
}
int main()
{
int i,j,t,a,b,k;
while(scanf("%d%d%d",&m,&n,&k)!=EOF)
{ memset(match,-,sizeof(match));
memset(graphic,,sizeof(graphic));
memset(map,,sizeof(map));
for(i=;i<=k;i++)
{
scanf("%d%d",&a,&b);
map[b][a]=;
}
x=y=;
for(i=;i<=m;i++)
{
for(j=;j<=n;j++)
{
if((i+j)%)
M[++y]=Pos(i,j);
else
N[++x]=Pos(i,j);
if(j<n)
{
if(!map[i][j+]&&!map[i][j])
{
if((i+j)%==)
graphic[Pos(i,j)][Pos(i,j+)]=;
if((i+j)%)
{
graphic[Pos(i,j+)][Pos(i,j)]=;
}
}
}
if(i<m)
{
if(!map[i+][j]&&!map[i][j])
{
if((i+j)%)
graphic[Pos(i+,j)][Pos(i,j)]=;
if((i+j)%==)
graphic[Pos(i,j)][Pos(i+,j)]=;
}
}
}
}
int ans=n*m-k;
if(ans%==)
{
printf("NO\n");
continue;
}
int num=;
for(i=;i<=x;i++)
{
memset(vi,,sizeof(vi));
if(dfs(N[i]))
{
num++;
}
}
if(num*==ans)
printf("YES\n");
else
printf("NO\n"); }
return ;
}

poj 2446 二分图最大匹配的更多相关文章

  1. poj 2239 二分图最大匹配,基础题

    1.poj 2239   Selecting Courses   二分图最大匹配问题 2.总结:看到一个题解,直接用三维数组做的,很巧妙,很暴力.. 题意:N种课,给出时间,每种课在星期几的第几节课上 ...

  2. POJ 2226二分图最大匹配

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是二部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图 ...

  3. POJ Evacuation /// 二分图最大匹配

    题目大意: 在一个n*m的房间中 ‘X’为墙 ‘D’为门 ‘.’为人 门只存在与外围 人每秒钟只能向四连通区域走一步 门比较狭窄 每秒钟只能通过一个人 求所有人逃脱的最短时间 如果不可能则输出impo ...

  4. poj 2724 二分图最大匹配

    题意: 会给出M个串,我们要做的就是将这M个串给清除了.对于任意两个串,若二进制形式只有一位不一样,那么这两个串可以在一次操作消除,否则每个操作只能消除一个串. 3 3 *01 100 011 可以代 ...

  5. Asteroids - poj 3041(二分图最大匹配问题)

      Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17258   Accepted: 9386 Description Be ...

  6. poj 1469 二分图最大匹配

    就是最简单的最大匹配,没的说 #include<iostream> #include<cstdio> #include<cstring> #include<a ...

  7. poj 1469(二分图 最大匹配)

    这道题让我认识到了c++cin,cout确实会使其超时,还是我用的c printf吧 #include<cstdio> #include<iostream> #include& ...

  8. POJ 1719 二分图最大匹配(记录路径)

    Shooting Contest Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4097   Accepted: 1499 ...

  9. poj 3692 二分图最大匹配

    思路: 如果我们将认识的建边,求最大独立集就是互相不认识的人数.那么我们反过来,将不认识的建图,求最大独立集就是互相认识的人数. #include<cstdio> #include< ...

随机推荐

  1. iOS Launch Images name

    4.0 inch screen:Default-568h@2x.png (old 640x1136 ~ for iPhone 5) 4.0 inch screen: LaunchImage-700-5 ...

  2. LCD1602汉字、自定义字符取模

    用zimo221软件, 新建一个8*8的图像,留出左边3列,用右边5列点出自定义字符,选择取模方式C51,就可得到对应的编码 如下图:温度符号℃的编码

  3. jQuery基础学习8——层次选择器next()和prev()方法

    $('.one + div').css("background","#bbffaa"); //和next()方法是等价的,前后关系,和prev()方法是对立的 ...

  4. 前端的一些常用DOM和事件归纳

    1.document.getElementById(id); document.getElementByTagName(tagName);       document.getElementsByNa ...

  5. CodeForces 705C Thor (模拟+STL)

    题意:给定三个操作,1,是x应用产生一个通知,2,是把所有x的通知读完,3,是把前x个通知读完,问你每次操作后未读的通知. 析:这个题数据有点大,但可以用STL中的队列和set来模拟这个过程用q来标记 ...

  6. jQuery jsonp跨域请求

    跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...

  7. centos 6.5下安装docker

    关于docker的更多信息,请移步度娘.以下两个链接也对docker有了具体的介绍: http://www.docker.org.cn/book/docker/what-is-docker-16.ht ...

  8. LCD_ILI9320横竖屏方向的问题。

    发现仅仅设置R03H是不能设置方向的,还需要设置R32H,R33H的坐标位置. 比如我现在是 R03H=0x1000H,R20H=239-x,R21H=319-y:竖直正向 R03H=0x1030H, ...

  9. UOJ #148. 【NOIP2015】跳石头 二分

    #148. [NOIP2015]跳石头 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/148 Descripti ...

  10. ListView添加项目带序列

    ListView添加项目带序列     function AddSelItems(listview1:TListView;ListView2:TListView):Boolean;var  s: st ...