poj2226 二分图匹配经典行列建图
2016-04-30 17:00
274 查看
http://poj.org/problem?id=2226
题目大意:
如何放木板保证只覆盖到’*’ 而没有覆盖到’.’。
思路:
进行行列建图,将横着的木板作为二分图中一侧的点,竖着的木板作为另一侧,定义出二分图。对于每一个’*’的点,考虑横着的木板如何覆盖它,竖着的如何覆盖,如何定义横着覆盖它的木板的编号,其实就可以把每一个需要覆盖的顶点所在的泥地上的最左端的顶点作为横着木板的编号,所在泥地最上端的顶点作为竖着的,将最左端的顶点和最上端的顶点连边建立二分图。最后求最小的顶点覆盖。就是等于保证每个泥地都被横着的木板或者竖着的木板覆盖了。
代码:
题目大意:
如何放木板保证只覆盖到’*’ 而没有覆盖到’.’。
思路:
进行行列建图,将横着的木板作为二分图中一侧的点,竖着的木板作为另一侧,定义出二分图。对于每一个’*’的点,考虑横着的木板如何覆盖它,竖着的如何覆盖,如何定义横着覆盖它的木板的编号,其实就可以把每一个需要覆盖的顶点所在的泥地上的最左端的顶点作为横着木板的编号,所在泥地最上端的顶点作为竖着的,将最左端的顶点和最上端的顶点连边建立二分图。最后求最小的顶点覆盖。就是等于保证每个泥地都被横着的木板或者竖着的木板覆盖了。
代码:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <vector> using namespace std; #define M 10009 vector<int> G[M]; char mp[M][M]; bool used[M]; int match[M]; int n,m; void init() { for(int i = 0;i <= 2*n*m;i++) G[i].clear(); } void add_edge(int u,int v) { G[u].push_back(v); G[v].push_back(u); } bool dfs(int u) { for(int i = 0;i < G[u].size();i++) { int v = G[u][i]; if(!used[v]) { used[v] = true; if(match[v] < 0 || dfs(match[v])) { match[v] = u; return true; } } } return false; } int hungry() { int res = 0; memset(match,-1,sizeof(match)); for(int i = 0;i < n*m;i++) { memset(used,false,sizeof(used)); if(dfs(i)) res++; } return res; } int main() { while(scanf("%d %d",&n,&m) == 2) { for(int i = 0;i < n;i++) { scanf("%s",mp[i]); } for(int i = 0; i < n;i++) { for(int j = 0;j < m;j++) { if(mp[i][j] == '*') { int x = i,y = j; while(x > 0 && mp[x-1][j] == '*') x--; while(y > 0 && mp[i][y-1] == '*') y--; add_edge(x*m+j,i*m+y+m*n); } } } printf("%d\n",hungry()); } return 0; }
相关文章推荐
- 1027. 打印沙漏(20)
- 记录最近遇到的两个小问题
- nyoj_71 独木舟上的旅行
- redis数据类型
- 【小笨鸟看JDK1.7集合源码之四】Vector源码剖析
- 机器学习----Softmax回归
- hdu_2608_0 or 1_数论
- ListView和数据适配器SimpleAdapter例子
- hdu_2608_0 or 1_数论
- python使用zlib实现压缩与解压字符串
- CODEVS 3023 魔法禁书目录1:追捕大妈
- 正向代理与反向代理
- 《UNIX环境高级编程》(进程环境)
- error C4996: 'pcl::SAC_SAMPLE_SIZE': PCL1.8问题汇总
- Java循环练习:已知s=1×2×3×…×n,计算出s不大于5000时n的最大值
- 2.ubuntu 配置目录
- 【自考总结】 操作系统概论
- java学习-字符串2.
- 1026. 程序运行时间(15)
- 英语的五种基本句型