POJ_2446_Chessboard
题目意思就是一个M*N的有洞棋盘棋盘上,用1*2的板子去覆盖没有洞的地方,要求板子不能重叠,最终能否将棋盘完整覆盖。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 35 struct z
{
int color;
int ct;
};
struct z chess[MAX*MAX];
int lc,rc;
int m,n;a
__int64 hole[MAX*MAX];
__int64 G[MAX*MAX][MAX*MAX];
__int64 link[MAX*MAX];
__int64 vis[MAX*MAX];
int zero=,one=;/*分别记录0,1的个数*/ int find(int);
void bin_map(void); int main(void)
{
int k,i,j;
int x,y;
scanf("%d%d%d",&m,&n,&k);
for(i=; i<k; i++)
{
scanf("%d%d",&x,&y);
hole[n*(y-)+x]=;
}
if(n&)
for(j=,i=; i<=m*n; i++)
{
if(hole[i]==)
{
chess[i].color=j=!j;
if(j)
chess[i].ct=++one;
else
chess[i].ct=++zero;
}
else
{
chess[i].color=-;
j=!j;
}
}
else
for(j=,i=; i<=m*n; i++)
{
if(hole[i]==)
{
chess[i].color=!j;
if(!j)
chess[i].ct=++one;
else chess[i].ct=++zero;
}
else
chess[i].color=-;
if(i%n)
j=!j;
}
bin_map();
int ans=;
for(i=; i<=zero; i++)
{
memset(vis,,sizeof(vis));
if(find(i))
ans++;
}
if(*ans==m*n-k)
puts("YES");
else puts("NO");
return ;
} void bin_map(void)
{
int i;
for(i=; i<=m*n; i++)
{
if(chess[i].color==)
{
if(i%n!=&&chess[i-].color==)
G[chess[i].ct][chess[i-].ct]=;
if(i%n&&chess[i+].color==)
G[chess[i].ct][chess[i+].ct]=;
if(i>n&&chess[i-n].color==)
G[chess[i].ct][chess[i-n].ct]=;
if(i<=m*n-n&&chess[i+n].color==)
G[chess[i].ct][chess[i+n].ct]=;
}
}
}
int find(int x)
{
int i;
for(i=; i<=one; i++)
{
if(G[x][i]&&!vis[i])
{
vis[i]=;
if(link[i]==||find(link[i]))
{
link[i]=x;
return ;
}
}
}
return ;
}
我的思路大致是这样:
由于是将棋盘相邻两区域覆盖,所以可将棋盘黑白相间的涂色,然后再挖去相应的洞,这样,将白色的作为一个二分图节点子集,剩下的作为另一个子集,然后相邻的黑白块代表的顶点在二分图中连接起来,然后求出二分图的额最大匹配数,便是最多能够放置的板子。
POJ_2446_Chessboard的更多相关文章
随机推荐
- centos 下安装ati显卡驱动方法
1)到ati的官网(http://support.amd.com/us/gpudownload/Pages/index.aspx)下载相应的驱动,一定要注意 radeon系列和mobility rad ...
- xml_02
1.xml 2.对于XML文档的约束 |-DTD <!DOCTYPE 根元素 [ <!ELEMENT 元素名 (xx)> <!ATTLIS ...
- VS2010数据库连接问题
我用SQL server 2008写了一个小表格,运行VS的前选择了 工具-连接数据库,然后选择了那个表格的名称.运行后出现如下错误提示,请问是哪里出了问题呢? 数据库连接版本有问题.在VS中把信用数 ...
- Quartz Cron表达式生成器
格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0 ...
- win7系统玩游戏不能全屏的解决办法
1.修改注册表中的显示器的参数设置 Win键+R键,打开运行窗口,输入regedit回车,这样就打开了注册表编辑器,然后,定位到以下位置: HKEY_LOCAL_MACHINE\SYSTEM\ ...
- c3p0配置文件报错 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。
原配置文件: 异常截图: 百度可知: 在xml的配置文件中 :要用 & 代替 更改后配置文件:
- Js~数组的操作push,pop,shift,unshift
说几个概念: 队列:先进先出堆栈:先进后出 shift:从集合中把第一个元素删除,返回这个元素的值pop:从集合中把最后一个元素删除,返回这个元素的值 unshift:在集合开头添加一个或者多个元素, ...
- UVA 10066 The Twin Towers(LCS)
Problem B The Twin Towers Input: standard input Output: standard output Once upon a time, in an anci ...
- atc游戏bot
游戏玩起来太虐心了,就写了个bot来玩, 代码在此: git clone https://github.com/chenfengyuan/atc-bot-new.gitgit clone https: ...
- Google C++编程风格指南
作者:Hawstein 出处:http://hawstein.com/posts/google-cpp-style-guide.html 前言 越来越发现一致的编程风格的重要性,于是把Google的C ...