[Usaco2005 Jan]Muddy Fields泥泞的牧场
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泥泞的牧场相关推荐
- bzoj 1689: [Usaco2005 Open] Muddy roads 泥泞的路(模拟)
1689: [Usaco2005 Open] Muddy roads 泥泞的路 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 445 Solved: ...
- 1677: [Usaco2005 Jan]Sumsets 求和
1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 626 Solved: 348 [Sub ...
- bzoj1679[Usaco2005 Jan]Moo Volume 牛的呼声*
bzoj1679[Usaco2005 Jan]Moo Volume 牛的呼声 题意: N只牛,每只牛都与其他N-1只牛聊着天.一个对话的进行,需要两只牛都按照和她们间距离等大的音量吼叫,计算音量和.N ...
- poj Muddy Fields
Muddy Fields 原题去我创的专题里找.在文件夹首页. 题目: 给出N*M矩阵.当中*表示泥土,.表示小草.要你用最少的木板把泥土覆盖. 木板长度不限,可是仅仅能水平和竖直. 行列式二分匹配配 ...
- bzoj 1677: [Usaco2005 Jan]Sumsets 求和(DP)
1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1012 Solved: 592 [Su ...
- 洛谷:P6062 [USACO05JAN]Muddy Fields G
题目链接:P6062 [USACO05JAN]Muddy Fields G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 此题重点在二分图的建图. 考虑放置木板的决策,由于可以重复 ...
- [BZOJ1677] [Usaco2005 Jan]Sumsets 求和
[Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec Memory Limit: 64 MB Description Farmer John commanded hi ...
- 【bzoj1677】[Usaco2005 Jan]Sumsets 求和
1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 970 Solved: 562[Subm ...
- 51nod Muddy Fields 2856
题意: 2856 Muddy Fields 1.0 秒 262,144.0 KB 80 分 5级题 在一个n*m的草地上有一些泥坑,现在可以用宽度为1,长度任意的长木板去覆盖泥坑,但是木板不能覆盖草地 ...
最新文章
- 读农民工兄弟学C#文章后的感觉
- 华为云发布全新DevOps实践,大幅提升交付效率
- 006_Spring Data JPA基于方法名称命名规则查询
- 为什么离开学校后,学习能力直线下降?
- C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)
- sqlalchemy query
- 【第二组】项目冲刺(Beta版本)第五次每日例会 2017/7/23
- 大觉寺到鹫峰线路_大觉寺到鹫峰怎么走
- 一种云端语音识别系统及方法
- oracle人才盘点演示,Oracle 11g Golden Gate DDL单向同步实例演示
- 为什么普通红包自己不能领_腾讯为推广新游王牌战士而豪撒千金?快去看看你能不能领红包...
- 我眼中的解决方案架构师
- Facebook Google广告开户流程
- JeecgBoot全套开发环境搭建
- 百度AI平台申请使用流程
- python批量导入图片_Python批量导入图片生成PowerPoint 2007+文件
- 大话设计模式(Java代码)
- Word标题跟随正文样式缩进的解决办法
- 计算机激光鼠标,差评终结者:激光鼠标就是比光电的好?
- Hibernate数据库方言
热门文章
- stack java实现_java实现stack
- 土是独体字结构吗_毛笔楷书基础练习独体字部首的写法(左部)4
- 译文 | 与TensorFlow的第一次接触 第五章:多层神经网络
- 自动泊车算法中混合A*粗路径的MATLAB实现
- linux的可执行文件通常放在哪个目录中?写出该目录的路径.,实验2 Linux的基本操作与 使用vi编辑器 2010 (1)...
- 为什么要 conda 作用_武汉精神堡垒有什么作用 为什么要做?
- C语言n个坐标点间的最大距离,SOS!求检查程序,到17个点距离之和最小的点的坐标...
- json 生成html转换,根据json字符串生成Html的一种方式
- elementui带输入建议查询_elementUi简单实现搜索提词功能
- c语言较大的整型相加,二个超长正整数的相加