POJ2226
来源:互联网 发布:数据库脚本怎么写 编辑:程序博客网 时间:2024/06/03 08:34
题意:给定一个矩阵,其中有一些地方有水,现在有一些长度任意,宽为1的木板,要求在所有板不跨越任何坑的前提下,用一些木板盖住这些有水的地方,问至少需要几块板子?
思路:
然后你们懂的,二分匹配好了。
代码如下:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N = 600;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 = 1; j <= q; j++){if(lin[x][j] && used[j] == 0){used[j] = 1;if(arr[j] == 0 || find(arr[j])){arr[j] = x;return true;}}}return false;}int main(){int r, c;while(~scanf("%d%d", &n, &m)){memset(map, '0', sizeof(map));for(int i = 0; i < n; i++){scanf("%s", &map[i]);}memset(lin, false , sizeof(lin));memset(arr, 0, sizeof(arr));p = 0;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(map[i][j] == '*'){if(map[i][j-1] != '*'){p++;}mark[i][j] = p;}}}q = 0;for(int j = 0; j < m; j++){for(int i = 0; i < n; i++){if(map[i][j] == '*'){if(map[i-1][j] != '*'){q++;}lin[mark[i][j]][q] = true;}}}int all = 0;for(int i = 1; i <= p; i++){memset(used, 0, sizeof(used));if(find(i))++all;}printf("%d\n", all);}return 0;}
0 0
- poj2226
- POJ2226
- poj2226
- POJ2226
- poj2226
- POJ2226
- poj2226
- POJ2226 Muddy Fields
- poj2226 - Muddy Fields
- POJ2226 Muddy Fields
- poj2226 Muddy Fields
- poj2226 Muddy Fields
- poj2226 Muddy Fields
- poj2226 二分图匹配
- poj2226(最小点覆盖)
- POJ2226 Muddy Fields
- POJ2226 Muddy Fields
- poj2226 muddy fields
- 为什么匿名内部类中引用的局部变量和参数需要final而成员字段不用?
- 联网查看图片的Demo
- 写在准备找工作的日子里
- 《C++ 沉思录》阅读笔记——代理类
- Opengl编程遇到的问题以及解决
- POJ2226
- SQL语句的语法-Data Manipulation Statements
- hdu 1272 小希的迷宫
- 学习笔记六:内存管理
- Karaf 实践指南 Kafka 安装 Karaf 学习 Kafka 帮助
- 《C++ 沉思录》阅读笔记——句柄类
- A. Kyoya and Photobooks
- 程序实现线索二叉树的结构及其操作
- 配置与管理DNS服务器——配置主要名称服务器