Description
雨连续不断的击打了放牛的牧场,一个R行C列的格子(1<=R<=50,1<=C<=50)。虽然这对草来说是件好事,但这却使得一些没有草遮盖的土地变得很泥泞。牛们是很小心的食草动物;他们不想在吃草时把蹄子弄脏。为了避免它们把蹄子弄脏,农夫约翰要在那些泥泞的地方铺上木板子。每个1个单位宽,长度任意。每个板子都必须放到与牧场一边平行。农夫约翰希望用最少的板子来覆盖泥泞的部分。一些地方可能需要多于一块板子来覆盖。木板不可以遮住草地,剥夺牛吃草的地方,但是他们可以相互重叠。计算最少需要多少块板子来覆盖所有的泥地。

Input

  • 第一行:两个整数R和C,由空格隔开。
  • 第2到第R+1行:每行为一个长度为C的字符串。'*'代表泥地,'.'代表草地。

无空格。

Output

  • 第一行:一个整数,其值为最少需要的板子数目

Sample Input
4 4
*.*.
.***
***.
..*.

Sample Output
4

OUTPUT DETAILS:
板子 1, 2, 3 和 4 是这样摆放的:
1.2.
.333
444.
..4.
板子2与3,4重叠。


二分图匹配,泥泞点要么被横向的板子覆盖,要么被纵向的板子覆盖,但是板子不能盖在草地上。所以我们找下联通块,再做二分图最大匹配。

/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar())  if (ch=='-')    f=-1;for (;ch>='0'&&ch<='9';ch=getchar())    x=(x<<1)+(x<<3)+ch-'0';return x*f;
}
inline void print(int x){if (x>=10)     print(x/10);putchar(x%10+'0');
}
const int N=5e1;
int path[(N*N>>1)+10],pre[N*N+10],now[(N*N>>1)+10],child[N*N+10];
int A[N+10][N+10],B[N+10][N+10];
int tot,n,m,Acnt,Bcnt,ans;
bool use[(N*N>>1)+10];
char map[N+10][N+10];
void join(int x,int y){pre[++tot]=now[x],now[x]=tot,child[tot]=y;}
bool check(int x){for (int p=now[x],son=child[p];p;p=pre[p],son=child[p]){if (use[son])   continue;use[son]=1;if (path[son]<0||check(path[son])){path[son]=x;return 1;}}return 0;
}
int main(){n=read(),m=read();for (int i=1;i<=n;i++)   scanf("%s",map[i]+1);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (map[i][j]=='*'){A[i][j]=j>1&&map[i][j-1]=='*'?A[i][j-1]:++Acnt;B[i][j]=i>1&&map[i-1][j]=='*'?B[i-1][j]:++Bcnt;}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (map[i][j]=='*')join(A[i][j],B[i][j]);memset(path,-1,sizeof(path));for (int i=1;i<=Acnt;i++){memset(use,0,sizeof(use));if (check(i))   ans++;}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Wolfycz/p/8422090.html

[Usaco2005 Jan]Muddy Fields泥泞的牧场相关推荐

  1. bzoj 1689: [Usaco2005 Open] Muddy roads 泥泞的路(模拟)

    1689: [Usaco2005 Open] Muddy roads 泥泞的路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 445  Solved:  ...

  2. 1677: [Usaco2005 Jan]Sumsets 求和

    1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 626  Solved: 348 [Sub ...

  3. bzoj1679[Usaco2005 Jan]Moo Volume 牛的呼声*

    bzoj1679[Usaco2005 Jan]Moo Volume 牛的呼声 题意: N只牛,每只牛都与其他N-1只牛聊着天.一个对话的进行,需要两只牛都按照和她们间距离等大的音量吼叫,计算音量和.N ...

  4. poj Muddy Fields

    Muddy Fields 原题去我创的专题里找.在文件夹首页. 题目: 给出N*M矩阵.当中*表示泥土,.表示小草.要你用最少的木板把泥土覆盖. 木板长度不限,可是仅仅能水平和竖直. 行列式二分匹配配 ...

  5. bzoj 1677: [Usaco2005 Jan]Sumsets 求和(DP)

    1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1012  Solved: 592 [Su ...

  6. 洛谷:P6062 [USACO05JAN]Muddy Fields G

    题目链接:P6062 [USACO05JAN]Muddy Fields G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 此题重点在二分图的建图. 考虑放置木板的决策,由于可以重复 ...

  7. [BZOJ1677] [Usaco2005 Jan]Sumsets 求和

    [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec Memory Limit: 64 MB Description Farmer John commanded hi ...

  8. 【bzoj1677】[Usaco2005 Jan]Sumsets 求和

    1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 970  Solved: 562[Subm ...

  9. 51nod Muddy Fields 2856

    题意: 2856 Muddy Fields 1.0 秒 262,144.0 KB 80 分 5级题 在一个n*m的草地上有一些泥坑,现在可以用宽度为1,长度任意的长木板去覆盖泥坑,但是木板不能覆盖草地 ...

最新文章

  1. 读农民工兄弟学C#文章后的感觉
  2. 华为云发布全新DevOps实践,大幅提升交付效率
  3. 006_Spring Data JPA基于方法名称命名规则查询
  4. 为什么离开学校后,学习能力直线下降?
  5. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)
  6. sqlalchemy query
  7. 【第二组】项目冲刺(Beta版本)第五次每日例会 2017/7/23
  8. 大觉寺到鹫峰线路_大觉寺到鹫峰怎么走
  9. 一种云端语音识别系统及方法
  10. oracle人才盘点演示,Oracle 11g Golden Gate DDL单向同步实例演示
  11. 为什么普通红包自己不能领_腾讯为推广新游王牌战士而豪撒千金?快去看看你能不能领红包...
  12. 我眼中的解决方案架构师
  13. Facebook Google广告开户流程
  14. JeecgBoot全套开发环境搭建
  15. 百度AI平台申请使用流程
  16. python批量导入图片_Python批量导入图片生成PowerPoint 2007+文件
  17. 大话设计模式(Java代码)
  18. Word标题跟随正文样式缩进的解决办法
  19. 计算机激光鼠标,差评终结者:激光鼠标就是比光电的好?
  20. Hibernate数据库方言

热门文章

  1. stack java实现_java实现stack
  2. 土是独体字结构吗_毛笔楷书基础练习独体字部首的写法(左部)4
  3. 译文 | 与TensorFlow的第一次接触 第五章:多层神经网络
  4. 自动泊车算法中混合A*粗路径的MATLAB实现
  5. linux的可执行文件通常放在哪个目录中?写出该目录的路径.,实验2 Linux的基本操作与 使用vi编辑器 2010 (1)...
  6. 为什么要 conda 作用_武汉精神堡垒有什么作用 为什么要做?
  7. C语言n个坐标点间的最大距离,SOS!求检查程序,到17个点距离之和最小的点的坐标...
  8. json 生成html转换,根据json字符串生成Html的一种方式
  9. elementui带输入建议查询_elementUi简单实现搜索提词功能
  10. c语言较大的整型相加,二个超长正整数的相加