HDU 1507 Uncle Tom's Inherited Land*
题目大意:给你一个矩形,然后输入矩形里面池塘的坐标(不能放东西的地方),问可以放的地方中,最多可以放多少块1*2的长方形方块,并输出那些方块的位置。
题解:我们将所有未被覆盖的分为两种,即分为黑白格(i+j结果为奇数和偶数),然后将相邻的连边,做一遍最大匹配即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N=105;
vector v[N];
int q,w,m,n,k,odd,even,oddx[N],evenx[N],oddy[N],eveny[N],used[N],link[N];
int map[N][N];
struct node{int x,y,x1,y1;}ans[N];
int abs(int a){return a>0?a:-a;}
bool Dfs(int k){
for(int i=0;i<v[k].size();i++){
int a=v[k][i];
if(used[a]==0){
used[a]=1;
if(link[a]==-1||Dfs(link[a])){link[a]=k;return 1;}
}
}return 0;
}
bool cmp(node a,node b){return a.x<b.x||(a.x==b.x&&a.y<b.y);}
int main(){
while(scanf("%d%d",&n,&m),n!=0&&m!=0){
for(int i=0;i<N;i++)v[i].clear();
scanf("%d",&k); odd=even=0;
memset(map,0,sizeof(map));
for(int i=0;i<k;i++)scanf("%d%d",&q,&w),map[q][w]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)if(!map[i][j]){
if((i+j)%2==0)evenx[++even]=i,eveny[even]=j;
else{oddx[++odd]=i;oddy[odd]=j;}
}
for(int i=1;i<=odd;i++)
for(int j=1;j<=even;j++){
if(oddx[i]==evenx[j]&&abs(oddy[i]-eveny[j])==1)v[j].push_back(i);
if(oddy[i]==eveny[j]&&abs(oddx[i]-evenx[j])==1)v[j].push_back(i);
}int count=0;
memset(link,-1,sizeof(link));
for(int i=1;i<=even;i++){
memset(used,0,sizeof(used));
if(Dfs(i))count++;
}int cnt=0;
printf("%d\n",count);
for(int i=1;i<=odd;i++){
if(link[i]!=-1){
if(oddx[i]<evenx[link[i]]||(oddx[i]==evenx[link[i]]&&oddy[i]<eveny[link[i]])){
ans[cnt].x=oddx[i];ans[cnt].y=oddy[i];
ans[cnt].x1=evenx[link[i]];ans[cnt++].y1=eveny[link[i]];
}else{
ans[cnt].x1=oddx[i];ans[cnt].y1=oddy[i];
ans[cnt].x=evenx[link[i]];ans[cnt++].y=eveny[link[i]];
}
}
}
sort(ans,ans+cnt,cmp);
for(int i=0;i<cnt;i++)printf("(%d,%d)--(%d,%d)\n",ans[i].x,ans[i].y,ans[i].x1,ans[i].y1);
}
return 0;
}
HDU 1507 Uncle Tom's Inherited Land*的更多相关文章
- 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 ...
- 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 ...
- 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 ...
- HDU 1507 Uncle Tom's Inherited Land(最大匹配+分奇偶部分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 题目大意:给你一张n*m大小的图,可以将白色正方形凑成1*2的长方形,问你最多可以凑出几块,并输 ...
- HDU——T 1507 Uncle Tom's Inherited Land*
http://acm.hdu.edu.cn/showproblem.php?pid=1507 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- 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 ...
- Uncle Tom's Inherited Land*
Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 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 ...
- hdu1507 Uncle Tom's Inherited Land* 二分匹配
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 将i+j为奇数的构成x集合中 将i+j为偶数的构成y集合中 然后就是构建二部图 关键就是构图 然 ...
随机推荐
- Oracle Select into 用Sql server替换
--Oracle: DECLARE n_count int; begin Select count(*) into n_count from from M_Test where ENTITYLSH = ...
- node中的get请求和post请求的不同操作【node学习第五篇】
获取get的请求内容 /** * Created by Administrator on 2016/8/5. */ var http = require("http"); var ...
- HelloWorld——Cocos2d-x学习历程(二)
HelloWorld分析: 1."resource"文件夹 该文件夹主要用于存放游戏中需要的图片.音频和配置等资源文件. 2."include"和"s ...
- 用C++写一个简单的服务器和客户端
我们将创建一个服务器节点add_two_ints_server,它将会收到两个整数,并且返回它们的和.切换目录到之前建立的beginner_tutorials包下: cd ~/catkin_ws/sr ...
- hdu 4034 Graph floyd
题目链接 给出一个有向图各个点之间的最短距离, 求出这个有向图最少有几条边, 如果无法构成图, 输出impossible. folyd跑一遍, 如果dp[i][j] == dp[i][k]+dp[k] ...
- Linux中的盘符问题
在windows 中像 C.D.E.F这些都可以当盘符,就是说对应了我们所看到的C盘,D盘,E盘,F盘.然而是不是只能加26个硬盘了呢? 盘符到硬盘也只是一个对映关系,我们也是可以建立从一个文件夹到一 ...
- issues about Facebook Login
在学习The complete iOS 9 Developer Course - Build 18 Apps 中的Letture134-Facebook Login,需要整合(integrate)Pa ...
- 传智播客C/C++各种开发环境搭建视频工具文档免费教程
传智播客作为中国IT培训的领军品牌,一直把握技术趋势,给大家带来最新的技术分享!传智播客C/C++主流开发环境免费分享视频文档中,就有写一个helloworld程序的示范.火速前来下载吧 所谓&quo ...
- 第七届河南省赛A.物资调度(dfs)
10401: A.物资调度 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 95 Solved: 54 [Submit][Status][Web Bo ...
- request.getParameterValues与request.getParameter的差别
一. 简单的对照 request.getParameter用的比較多,相对熟悉 request.getParameterValues(String name)是获得如checkbox类(名字同样, ...