POJ 2226 Muddy Fields 二分图(难点在于建图)
题意:给定一个矩阵和它的N行M列,其中有一些地方有水,现在有一些长度任意,宽为1的木板,要求在板不跨越草,用一些木板盖住这些有水的地方,问至少需要几块板子?
思路:首先想到如果没有不准跨越草的条件则跟POJ 3041题意一样(如果想看的话可以点击这里),然而这一题多了个条件,那么将矩阵转化的方式需要改变,不能直接将行列分成两个集合了。需要先查看两遍矩阵,一遍横向查看有无连续‘*’的情况,若连续说明一块板子就可以覆盖,所以标记为同样的数字,反之则不同;同理另一遍纵向查看矩阵连续'*'的情况,处理方式同上。这样就建图完毕了。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = ;
int n, m, p, q;
bool lin[N][N];
int used[N], arr[N], mark[N][N];
char map[N][N];
bool find(int x)
{
for(int j = ; j <= q; j++)
{
if(lin[x][j] && used[j] == )
{
used[j] = ;
if(arr[j] == || find(arr[j]))
{
arr[j] = x;
return true;
}
}
}
return false;
}
int main()
{
int r, c;
while(~scanf("%d%d", &n, &m))
{
memset(map, '', sizeof(map));
for(int i = ; i < n; i++)
{
scanf("%s", &map[i]);
}
memset(lin, false , sizeof(lin));
memset(arr, , sizeof(arr));
p = ;
for(int i = ; i < n; i++)
{
for(int j = ; j < m; j++)
{
if(map[i][j] == '*')
{
if(map[i][j-] != '*')//横向查看
{
p++;
}
mark[i][j] = p;
}
}
}
q = ;
for(int j = ; j < m; j++)
{
for(int i = ; i < n; i++)
{
if(map[i][j] == '*')
{
if(map[i-][j] != '*')//纵向查看
{
q++;
}
lin[mark[i][j]][q] = true;//横向已经检查完了可以直接建图了
}
}
}
int all = ;
for(int i = ; i <= p; i++)
{
memset(used, , sizeof(used));
if(find(i))
++all;
}
printf("%d\n", all);
}
return ;
}
POJ 2226 Muddy Fields 二分图(难点在于建图)的更多相关文章
- [POJ] 2226 Muddy Fields(二分图最小点覆盖)
题目地址:http://poj.org/problem?id=2226 二分图的题目关键在于建图.因为“*”的地方只有两种木板覆盖方式:水平或竖直,所以运用这种方式进行二分.首先按行排列,算出每个&q ...
- poj 2226 Muddy Fields (二分图)
大意:给定n*m网格, 每个格子为泥地或草地, 可以用一些长度任意宽度为1的木板盖住泥地, 要求不能盖到草地, 求最少要多少块木板能盖住所有泥地. 最小点覆盖板子题, 建图跑最大匹配即可. #incl ...
- POJ 2226 Muddy Fields(最小顶点覆盖)
POJ 2226 Muddy Fields 题目链接 题意:给定一个图,要求用纸片去覆盖'*'的位置.纸片能够重叠.可是不能放到'.'的位置,为最少须要几个纸片 思路:二分图匹配求最小点覆盖.和放车那 ...
- poj 2226 Muddy Fields (转化成二分图的最小覆盖)
http://poj.org/problem?id=2226 Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- poj 2226 Muddy Fields(最小覆盖点+构图)
http://poj.org/problem?id=2226 Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- poj 2226 Muddy Fields (二分匹配)
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7340 Accepted: 2715 Desc ...
- POJ - 2226 Muddy Fields (最小顶点覆盖)
*.*. .*** ***. ..*. 题意:有一个N*M的像素图,现在问最少能用几块1*k的木条覆盖所有的 * 点,k为>=1的任意值. 分析:和小行星那题很像.小行星那题是将一整行(列)看作 ...
- TTTTTTTTTTTTTTTTT POJ 2226 草地覆木板 二分匹配 建图
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9754 Accepted: 3618 Desc ...
- POJ 2226 Muddy Fields (二分图匹配)
[题目链接] http://poj.org/problem?id=2226 [题目大意] 给出一张图,上面有泥和草地,有泥的地方需要用1*k的木板覆盖, 有草地的地方不希望被覆盖,问在此条件下需要的最 ...
随机推荐
- UML-领域模型-添加关联和属性
1.何谓关联? 关联(association):一个类的全局变量引用了另一个类,就表示关联了这个类 2.何时使用关联? 长时间(需要记住)留存的需要关联:短时间的不需要.比如: 需要关联:老师教那些课 ...
- 宝塔面板,Typecho,Lsky Pro图床安装
宝塔面板,Typecho,Lsky Pro图床安装 本文安装包:链接:https://cloud.cangye.me/s/l3i4avjl 密码是宝塔面板4个汉字拼音首字母小写(防止被爬) 一,宝塔面 ...
- Cover letter
Cover letter意义和新意可以写的夸张一点没关系,写因存在竞争关系的不建议作为审稿人.不要推荐熟悉人(导师,导师的导师,有关系的人,co-authors)作为推荐审稿人,不要推荐非该领域内大牛 ...
- C语言入门基础整理
学习计算机技术,C语言可以说是必备的,他已经成为现在计算机行业人学习必备的,而且应用也是十分的广泛,今天就来看看拥有几年c语言工作经验的大神整理的C语言入门基础知识,没有学不会,只有不肯学. 结构化程 ...
- 吴裕雄--天生自然python Google深度学习框架:图像识别与卷积神经网络
- Codeforces 1293A - ConneR and the A.R.C. Markland-N
题目大意: ConneR老师想吃东西,他现在在大楼的第s层,大楼总共有n层,但是其中有k层的餐厅关门了. 然后给了这k层关门的餐厅分别所在的楼层. 所以问ConneR老师最少得往上(或者往下)走几层楼 ...
- Codeforces Round #556(Div.1)
A 容易发现i,i+1至少有一个数出现,于是可以让尽量多的2和奇数出现 #include<bits/stdc++.h> using namespace std; int n,s1,s2; ...
- Netty之内存泄露
直接内存是IO框架的绝配,但直接内存的分配销毁不易,所以使用内存池能大幅提高性能. 1.为什么要有引用计数器 Netty里四种主力的ByteBuf,其中UnpooledHeapByteBuf底下的by ...
- python_8_集合
1.集合:可变集合set,不可变集合frozenset,集合是无序不重复的 set('hello') set9[1,2,3,4]) set((1,2,3)) 2.添加元素 > add:将元素整体 ...
- G - Radar Scanner Gym - 102220G(中位数~~)
zThere are n rectangle radar scanners on the ground. The sides of them are all paralleled to the axe ...