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集合中 然后就是构建二部图 关键就是构图 然 ...
随机推荐
- springmvc的ModelAndView的简单使用
参考:http://blog.csdn.net/zzjjiandan/article/details/34089313 先上图: MAVTest.java package com.wyl; impor ...
- php数组使用技巧及操作总结
数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是一些小结,借此记之,便于以后鉴之. 1. 数组定义 数组的定义使用 array()方式定义,可以定义空数组:<?ph ...
- bzoj 1085: [SCOI2005]骑士精神 IDA*
题目链接 给一个图, 目标位置是确定的, 问你能否在15步之内达到目标位置. 因为只有15步, 所以直接ida* #include<bits/stdc++.h> using namespa ...
- hdu 3032 Nim or not Nim? 打sg表
题目链接 给出n堆石子, 每次可以取一堆中的任意x个(x>=1), 或者将一堆石子拆成两堆, 取到最后一堆的胜. 这个题需要打sg表找规律, 打表程序看代码. #include<bits/ ...
- vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板)
vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板): Customizing ASP.NET MVC 5/Web API 2 Scaffoldi ...
- 4_Is Prime
4 // // ViewController.swift // Is Prime // // Created by ZC on 16/1/9. // Copyright © 2016年 ZC. All ...
- Java面试题之七
三十四.编码转换,怎样实现将GB2312 编码的字符串转换为ISO-8859-1 编码的字符串. String a=new String("中".getBytes("gb ...
- jquery阻止默认滑动
$(".swiper-slide").click(function(){ var index = imgarr[$(this).index()]; var content = &q ...
- 【方法2】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录
依据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换.这也是一种非常好的思路,我写了一下代码,顺便贴上来,供大家參考与分享. package shuai. ...
- 虎说:bootstrap源码解读(重置模块)
------<!--action-->------ 开场show:前不生“不犹豫”,后半生“不后悔”.今天又逃课,我不后悔 素材:推特公司的前端框架bootstrap(下称bt),解读源码 ...