原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html


题目传送门 - HDU1507


题意概括

  有一个n*m的棋盘,有些点是废的。

  现在让你用1*2的矩形覆盖所有的不废的点,并且不重叠,问最多可以覆盖多少个1*2的矩形,输出方案,有SPJ。

  输入描述:

  多组数据,每组首先两个数n,m(如果n和m为0,则结束程序)

  然后给出k

  然后给出k个二元组(x,y)表示废点的坐标。


题解

  按照前两片博文的算法已经不行了,因为方案不对了。

  所以我们要进行黑白染色。

  仅从(x,y)(x+y为奇数)向四连通方向连边,然后二分图匹配即可。

  其中match数组的值就是匹配对象。


代码

#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <cstdio>
using namespace std;
const int N=105,K=55;
int dx[4]={ 0, 0,-1, 1};
int dy[4]={-1, 1, 0, 0};
int n,m,k,cnt,pl[N][N],tn[N][N],bj[K],x[K],y[K];
int g[K][K],vis[K],match[K];
bool check(int x,int y){
return 1<=x&&x<=n&&1<=y&&y<=m&&tn[x][y];
}
bool Match(int x){
for (int i=1;i<=cnt;i++)
if (!vis[i]&&g[x][i]){
vis[i]=1;
if (!match[i]||Match(match[i])){
match[i]=x;
return 1;
}
}
return 0;
}
int hungary(){
int res=0;
memset(match,0,sizeof match);
for (int i=1;i<=cnt;i++){
if (!bj[i])
continue;
memset(vis,0,sizeof vis);
if (Match(i))
res++;
}
return res;
}
int main(){
while (~scanf("%d%d",&n,&m)&&(n||m)){
scanf("%d",&k);
memset(pl,0,sizeof pl);
for (int i=1,x,y;i<=k;i++)
scanf("%d%d",&x,&y),pl[x][y]=1;
memset(tn,0,sizeof tn);
cnt=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (!pl[i][j]){
bj[tn[i][j]=++cnt]=(i+j)&1;
x[cnt]=i,y[cnt]=j;
}
memset(g,0,sizeof g);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if ((i+j)&1)
for (int d=0;d<4;d++){
int a=i+dx[d],b=j+dy[d];
if (check(a,b))
g[tn[i][j]][tn[a][b]]=1;
}
int ans=hungary();
printf("%d\n",ans);
for (int i=1;i<=cnt;i++)
if (match[i])
printf("(%d,%d)--(%d,%d)\n",x[i],y[i],x[match[i]],y[match[i]]);
}
return 0;
}

  

HDU1507 Uncle Tom's Inherited Land* 二分图匹配 匈牙利算法 黑白染色的更多相关文章

  1. HDU 1507 Uncle Tom's Inherited Land*(二分图匹配)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  2. hdu-----(1507)Uncle Tom's Inherited Land*(二分匹配)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  3. hdu1507 Uncle Tom's Inherited Land* 二分匹配

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 将i+j为奇数的构成x集合中 将i+j为偶数的构成y集合中 然后就是构建二部图 关键就是构图 然 ...

  4. HDU1507 Uncle Tom's Inherited Land*

    题目是跟 zoj1516是一样的,但多了匹配后的输出 详解zoj1516可见http://www.cnblogs.com/CSU3901130321/p/4228057.html #include & ...

  5. HDU 1507 Uncle Tom's Inherited Land*(二分匹配,输出任意一组解)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  6. XTU 二分图和网络流 练习题 B. Uncle Tom's Inherited Land*

    B. Uncle Tom's Inherited Land* Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I ...

  7. Hdu 1507 Uncle Tom's Inherited Land* 分类: Brush Mode 2014-07-30 09:28 112人阅读 评论(0) 收藏

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  8. Uncle Tom's Inherited Land*

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...

  9. HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

随机推荐

  1. 转载:MySQL字段类型

    原文:https://www.cnblogs.com/jennyyin/p/7895010.html 数值类型 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128, ...

  2. .net常用的代码生成工具

    之前很多从事C#开发的用过动软代码生成器,然后随着IT技术的快速发展,涌现出很多优秀的工具关于.Net的,首推微软的Entity Framework,其次是NHibernate.Entity Fram ...

  3. HNU 2015暑期新队员训练赛2 H Blanket

    把每个 bi *x + ri ( 0 <= ri <= ai)标记, 输出被标记 0 – N 次的个数 #include<iostream> #include<cstdi ...

  4. es2015箭头函数的this

    摘自https://www.cnblogs.com/chenxygx/p/6509564.html,谢谢博主的分享!

  5. Python-视图 触发器 事务 存储过程

    1.视图2.触发器*** 在某个时间发生了某个事件时 会自动触发一段sql语句3.事务*****4.存储过程***** 5.函数6.备份与恢复*** mysqldump -u -p (库名 [表名] ...

  6. javaweb web.xml文件详解

    web.xml文件详解 前言:一般的web工程中都会用到web.xml,web.xml主要用来配置,可以方便的开发web工程.web.xml主要用来配置Filter.Listener.Servlet等 ...

  7. Codeforces 993E Nikita and Order Statistics [FFT]

    洛谷 Codeforces 思路 一开始想偏想到了DP,后来发现我SB了-- 考虑每个\(a_i<x\)的\(i\),记录它前一个和后一个到它的距离为\(L_i,R_i\),那么就有 \[ an ...

  8. Oracle 查询优化的基本准则详解

      注:报文来源:想跌破记忆寻找你 < Oracle 查询优化的基本准则详解 > Oracle 查询优化的基本准则详解 1:在进行多表关联时,多用 Where 语句把单个表的结果集最小化, ...

  9. Confluence 6 配置验证码(Captcha)来防止垃圾

    如果你的 Confluence 站点是对公众开放的(允许匿名用户使用,添加评论,创建页面等),你可能会发现你的站点会被自动创建很多垃圾页面,评论或者其他垃圾内容. 你可以配置让 Confluence ...

  10. html 之表单,div标签等。。。。。。。

    一.表单 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含textarea.select. ...