poj Muddy Fields
Muddy Fields
原题去我创的专题里找,在文件夹首页。
题目:
给出N*M矩阵。当中*表示泥土,.表示小草。要你用最少的木板把泥土覆盖。
木板长度不限。可是仅仅能水平和竖直。
行列式二分匹配配。是poj3041建图的加强版。
算法:
由poj3041的建图能够得到灵感。即把木板当作顶点,X轴,Y轴当作边。求解最小顶点覆盖。
3041的激光束不存在障碍物的问题,而这题却有不能压坏小草的限制。
我们能够换个角度思考。既然不能压坏小草,那就相当于该激光束到达这里必须停止了。
所以,我们就以小草为界分块的进行建图分析。
每当遇到了小草就到做是行或者是列到头了。
这样一来就是普通的二分图了。
T_T这一题的数据是25*25是上限 。由于。最坏情况下是草和泥土相间出现。
还有就是以后做题的时候,特别是矩阵输入一定要注意输入行列问题!!
!!!
。!!
!
说多了都是泪啊!!。!
/*
把对行列覆盖的木板当作点。则每一个格子变成了边。
则问题转换成了最小顶点覆盖问题 */ #include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std; const int MAXN = 50 + 10;
const int MAXV = 1500;
vector<int> G[MAXV]; char mp[MAXN][MAXN];
int numx[MAXN][MAXN],numy[MAXN][MAXN];
int match[MAXV];
bool used[MAXV];
int N,M,V; void init(){
for(int i = 0;i <= N*M;++i)
G[i].clear();
} bool dfs(int u){
for(int i = 0;i < (int)G[u].size();++i){
int v = G[u][i];
if(!used[v]){
used[v] = 1;
if(match[v] == -1||dfs(match[v])){
match[v] = u;
return true;
}
}
}
return false;
} void solve(){
int res = 0;
memset(match,-1,sizeof(match));
for(int i = 1;i <= V;++i){
memset(used,0,sizeof(used));
if(dfs(i)) res++;
} printf("%d\n",res);
} int main()
{
// freopen("Input.txt","r",stdin); while(~scanf("%d%d",&N,&M)){
init(); for(int i = 0;i < N;++i){
scanf("%s",mp[i]);
} int cnt = 0;
memset(numx,0,sizeof(numx));
memset(numy,0,sizeof(numy)); for(int i = 0;i < N;++i)
for(int j = 0;j < M;++j)
if(mp[i][j] == '*'){
++cnt;
while(j < M&&mp[i][j] == '*'){
numx[i][j] = cnt;
++j;
}
} V = cnt;
for(int j = 0;j < M;++j)
for(int i = 0;i < N;++i)
if(mp[i][j] == '*'){
++cnt;
while(i < N&&mp[i][j] == '*'){
numy[i][j] = cnt;
++i;
}
} for(int i = 0;i < N;++i){
for(int j = 0;j < M;++j){
if(numx[i][j] && numy[i][j]){
G[numx[i][j]].push_back(numy[i][j]);
}
}
} solve(); }
return 0;
}
poj Muddy Fields的更多相关文章
- POJ Muddy Fields 泥泞的牧场 二分图
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13235 Accepted: 4879 汪星人 ...
- 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(最小顶点覆盖)
POJ 2226 Muddy Fields 题目链接 题意:给定一个图,要求用纸片去覆盖'*'的位置.纸片能够重叠.可是不能放到'.'的位置,为最少须要几个纸片 思路:二分图匹配求最小点覆盖.和放车那 ...
- poj 2226 Muddy Fields (二分匹配)
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7340 Accepted: 2715 Desc ...
- Muddy Fields
Muddy Fields Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submi ...
- bzoj 1735: [Usaco2005 jan]Muddy Fields 泥泞的牧场 最小点覆盖
链接 1735: [Usaco2005 jan]Muddy Fields 泥泞的牧场 思路 这就是个上一篇的稍微麻烦版(是变脸版,其实没麻烦) 用边长为1的模板覆盖地图上的没有长草的土地,不能覆盖草地 ...
- BNUOJ 2345 Muddy Fields
Muddy Fields Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original I ...
- POJ 2226 Muddy Fields (最小点覆盖集,对比POJ 3041)
题意 给出的是N*M的矩阵,同样是有障碍的格子,要求每次只能消除一行或一列中连续的格子,最少消除多少次可以全部清除. 思路 相当于POJ 3041升级版,不同之处在于这次不能一列一行全部消掉,那些非障 ...
随机推荐
- 微信 编码要UTF8
<%@ WebHandler Language="C#" Class="Handler" %> using System; using System ...
- Qt程序crash信息的捕捉与跟踪(转)
本文转自 https://blog.csdn.net/lanhy999/article/details/12189375
- What does this bit-manipulating function do?
http://stackoverflow.com/questions/8637142/what-does-this-bit-manipulating-function-do unsigned long ...
- -webkit-box-flex: 1;属性和 float 属性冲突造成元素看不见的BUG
今天切图的时候发现了这个问题,样式是这样的: .check-btns-box .check-btn{float: left;-webkit-box-flex: 1;-moz-box-flex: 1;- ...
- 有关时间限制使用和软件注册的设计(delphi)
http://blog.sina.com.cn/s/blog_693cf1cf0100oyus.html procedure TForm1.form1create(Sender: TObject);v ...
- 51nod 1433 0和5【数论/九余定理】
1433 0和5 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 小K手中有n张牌,每张牌上有一个一位数的数,这个 ...
- 51nod 1001 数组中和等于K的数对【二分查找/排序】
1001 数组中和等于K的数对 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组 ...
- "科林明伦杯"哈尔滨理工大学第八届程序设计竞赛 题解
题目链接 Problems Problem A 快速幂累加即可. #include <cstdio> #include <cstring> #include <iost ...
- RMQ ---- ST(Sparse Table)算法
[概述] RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返 ...
- IntelliJ debug grails 无效的解决办法
从Grails 2.2以后默认run-app命令将启动Grails应用程序在一个单独的Java虚拟机. 这就是所谓的分叉的Tomcat Grails中的执行. 这样的类路径Grails构建系统和应用程 ...