题目名称 1167. 宫廷守卫
输入输出 guards.in/out
难度等级 ★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 Gravatar王者自由 于2012-10-17加入
开放分组 全部用户
提交状态
分类标签
二分图 并查集
分享题解
通过:0, 提交:1, 通过率:0%
Gravatar王者自由 10 0.008 s 1.54 MiB C++
关于 宫廷守卫 的近10条评论(全部评论)
仰慕。。
GravatarMakazeu
2012-10-25 15:41 1楼

1167. 宫廷守卫

★☆   输入文件:guards.in   输出文件:guards.out   评测插件
时间限制:1 s   内存限制:128 MiB

【题目描述】

从前有一个王国,这个王国的城堡是一个矩形,被分为M×N个方格。一些方格是墙,而另一些是空地。这个王国的国王在城堡里设了一些陷阱,每个陷阱占据一块空地。

一天,国王决定在城堡里布置守卫,他希望安排尽量多的守卫。守卫们都是经过严格训练的,所以一旦他们发现同行或同列中有人的话,他们立即向那人射击。因此,国王希望能够合理地布置守卫,使他们互相之间不能看见,这样他们就不可能互相射击了。守卫们只能被布置在空地上,不能被布置在陷阱或墙上,且一块空地只能布置一个守卫。如果两个守卫在同一行或同一列,并且他们之间没有墙的话,他们就能互相看见。(守卫就像象棋里的车一样)

你的任务是写一个程序,根据给定的城堡,计算最多可布置多少个守卫,并设计出布置的方案。

【输入格式】

第一行两个整数M和N(1≤M,N≤200),表示城堡的规模。

接下来M行N列的整数,描述的是城堡的地形。第i行j列的数用ai,j表示。

ai,j=0,表示方格[i,j]是一块空地;

ai,j=1,表示方格[i,j]是一个陷阱;

ai,j=2,表示方格[i,j]是墙。

【输出格式】

第一行一个整数K,表示最多可布置K个守卫。

此后K行,每行两个整数xi和yi,描述一个守卫的位置。

【输入样例】

3 4
2 0 0 0
2 2 2 1
0 1 0 2

【输出样例】

2
1 2
3 3

【样例解释】

样例数据如图(黑色方格为墙,白色方格为空地,圆圈为陷阱,G表示守卫)