hdu1507——Uncle Tom's Inherited Land*
Uncle Tom's Inherited Land*
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2114 Accepted Submission(s): 867
Special Judge
squares. He turned some of the squares into ponds, for he loved to hunt ducks and wanted to attract them to his property. (You cannot be sure, for you have not been to the place, but he may have made so many ponds that the land may now consist of several disconnected
islands.)
Your uncle Tom wants to sell the inherited land, but local rules now regulate property sales. Your uncle has been informed that, at his great-great-uncle's request, a law has been passed which establishes that property can only be sold in rectangular lots the
size of two squares of your uncle's property. Furthermore, ponds are not salable property.
Your uncle asked your help to determine the largest number of properties he could sell (the remaining squares will become recreational parks).

K indicating the number of squares that have been turned into ponds ( (N x M) - K <= 50). Each of the next K lines contains two integers X and Y describing the position of a square which was turned into a pond (1 <= X <= N and 1 <= Y <= M). The end of input
is indicated by N = M = 0.
If there are more than one solution, anyone is acceptable. there is a blank line after each test case. See sample below for clarification of the output format.
4 4
6
1 1
1 4
2 2
4 1
4 2
4 4
4 3
4
4 2
3 2
2 2
3 1
0 0
4
(1,2)--(1,3)
(2,1)--(3,1)
(2,3)--(3,3)
(2,4)--(3,4) 3
(1,1)--(2,1)
(1,2)--(1,3)
(2,3)--(3,3)
二分匹配。建边的根据是枚举全部可行的点,然后枚举周围四个方向。输出方案根据mark数组
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std;
const int maxn = 10010;
struct node
{
int to;
int next;
}edge[4 * maxn]; int vis[maxn];
int head[maxn];
int mark[maxn];
bool used[maxn];
bool mat[110][110];
int cnt[110][110];
int tot;
int n, m;
int index; void addedge(int from, int to)
{
edge[tot].to = to;
edge[tot].next = head[from];
head[from] = tot++;
} bool dfs(int x)
{
for (int i = head[x]; i != -1; i = edge[i].next)
{
if (!used[edge[i].to])
{
used[edge[i].to] = 1;
if (mark[edge[i].to] == -1 || dfs(mark[edge[i].to]))
{
mark[edge[i].to] = x;
return true;
}
}
}
return false;
} int hungary()
{
memset(mark, -1, sizeof(mark));
int ans = 0;
for (int i = 0; i < index; i++)
{
memset(used, 0, sizeof(used));
if (dfs(i))
ans++;
}
return ans;
} int main()
{
int k;
while (~scanf("%d%d", &n, &m))
{
if (!n && !m)
{
break;
}
scanf("%d", &k);
map<int, int>qu;
qu.clear();
memset(head, -1, sizeof(head));
memset(mat, false, sizeof(mat));
memset(vis, -1, sizeof(vis));
tot=0;
int x, y;
for (int i = 0; i < k; i++)
{
scanf("%d%d", &x, &y);
x--;
y--;
mat[x][y] = true;
}
index = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (!mat[i][j])
{
cnt[i][j] = index++;
qu[index - 1] = i * m + j;
} for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (!mat[i][j])
{
if (i > 0 && !mat[i - 1][j])
addedge(cnt[i][j], cnt[i - 1][j]);
if (i < n-1 && !mat[i + 1][j])
addedge(cnt[i][j], cnt[i + 1][j]);
if (j > 0 && !mat[i][j - 1])
addedge(cnt[i][j], cnt[i][j - 1]);
if (j < m - 1 && !mat[i][j + 1])
addedge(cnt[i][j], cnt[i][j + 1]);
}
}
int res = hungary();
printf("%d\n", res / 2);
for (int i = 0; i < index; ++i)
{
if (mark[i] != -1)
{
int a = qu[i];
int b = qu[mark[i]];
int x1 = a / m + 1;
int y1 = a % m + 1;
int x2 = b / m + 1;
int y2 = b % m + 1;
if (vis[a] == -1 && vis[b] == -1)
{
printf("(%d,%d)--(%d,%d)\n", x1, y1, x2, y2);
vis[a] = b;
vis[b] = a;
}
}
}
printf("\n");
}
return 0;
}
hdu1507——Uncle Tom's Inherited Land*的更多相关文章
- HDOJ 1507 Uncle Tom's Inherited Land*
直接对每一个格子进行dfs结果除以2能够得到答案可是有大量反复的结果,不好输出答案. 能够仅仅对横纵坐标相加是奇数的格子dfs.... Uncle Tom's Inherited Land* Time ...
- ZOJ 1516 Uncle Tom's Inherited Land(二分匹配 最大匹配 匈牙利啊)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=516 Your old uncle Tom inherited a p ...
- 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 ...
- HDU1507 Uncle Tom's Inherited Land* 二分图匹配 匈牙利算法 黑白染色
原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html 题目传送门 - HDU1507 题意概括 有一个n*m的棋盘,有些点是废的. 现在让你用1 ...
- hdu1507 Uncle Tom's Inherited Land* 二分匹配
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 将i+j为奇数的构成x集合中 将i+j为偶数的构成y集合中 然后就是构建二部图 关键就是构图 然 ...
- HDU1507 Uncle Tom's Inherited Land*
题目是跟 zoj1516是一样的,但多了匹配后的输出 详解zoj1516可见http://www.cnblogs.com/CSU3901130321/p/4228057.html #include & ...
- 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 ...
- Uncle Tom's Inherited Land*
Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
随机推荐
- [LUOGU] P4290 [BZOJ] 1055 [HAOI2008]玩具取名
题目描述 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用"WING"中任意两个字母代 ...
- 11. GLOBAL_VARIABLES 与 SESSION_VARIABLES
11. GLOBAL_VARIABLES 与 SESSION_VARIABLES 注意 从MySQL 5.7.6开始,show_compatibility_56系统变量的值会影响此处描述的表中的可用信 ...
- Ducci Sequence解题报告
A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1, a2, ... , ...
- 用cpp写对拍程序
#include <bits/stdc++.h> using namespace std; int main() { while(true) { puts(""); p ...
- Laya Tween 和 遮罩
Laya Tween 和 遮罩 @author ixenos 场景:在使用Tween循环时,不规则物体部分超出范围 方案:使用遮罩定型 困境:在laya ide设计模式中将遮罩sprite放到不规则物 ...
- C 题 KMP中next[]问题
题目大意: 找到能够进行字符串匹配的前缀 这题只要一直求next,直到next为0停止,记得答案是总长减去next的长度 #include <iostream> #include < ...
- html5的新通讯技术socket.io,实现一个聊天室
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jvm的类加载器,类装载过程
混沌初开,在一片名为jvm的世界中,到处都是一片虚无,直到一个名为BootstrapClassLoader的巨人劈开了世界,据说它是由名叫C++的女神所造,它从一个叫做jre/lib的宝袋中拿出一把开 ...
- BZOJ——2697: 特技飞行
http://www.lydsy.com/JudgeOnline/problem.php?id=2697 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: ...
- spring mvc get请求也可以接受DTO对象
spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从ht ...