poj 2226 Muddy Fields(二分图最大匹配)
来源:互联网 发布:app store推荐软件 编辑:程序博客网 时间:2024/06/05 07:48
貌似和 hdu 1045 Fire Net 差不多。
按照行列划分为两个点集,对于每一行,连续的 * 为一个木板,看作一个点,给他一个编号。对于每一列,同行进行一样的操作。行的那些编号是一个点集,列的那些编号是一个点集。如果两个 * 的块有交点,则在这两点之间连边,边就相当于木板之间的交点,即泥泞地的交点。这就是个二分图了。
用最少的木板覆盖所有的泥泞地,也就是覆盖上这些交点,即二分图中的边,因为木板长度不限制,所以只要覆盖上所有交点了,泥泞地也就全覆盖了,这就是最小点覆盖了,即二分图的最大匹配。
#include <stdio.h>#include <string.h>char gp[55][55];int number[55][55];const int MAXN = 510;int uN,vN;//u,v的数目,使用前面必须赋值int g[MAXN][MAXN];//邻接矩阵int linker[MAXN];bool used[MAXN];bool dfs(int u){ for(int v = 0; v < vN; v++) if(g[u][v] && !used[v]) { used[v] = true; if(linker[v] == -1 || dfs(linker[v])) { linker[v] = u; return true; } } return false;}int hungary(){ int res = 0; memset(linker,-1,sizeof(linker)); for(int u = 0; u < uN; u++) { memset(used,false,sizeof(used)); if(dfs(u))res++; } return res;}int main(){ int r,c; scanf("%d %d",&r,&c); for(int i = 0; i < r; ++i) { scanf("%s",gp[i]); gp[i][c] = '.'; } ++c; for(int i = 0; i < c; ++i) gp[r][i] = '.'; ++r; int nb = 0; bool flag = false; for(int i = 0; i < r; ++i) { flag = false; for(int j = 0; j < c; ++j) { if(gp[i][j] == '*') { flag = true; number[i][j] = nb; } else if(flag) { ++nb; flag = false; } } } uN = nb; nb = 0; for(int i = 0; i < c; ++i) { flag = false; for(int j = 0; j < r; ++j) { if(gp[j][i] == '*') { flag = true; g[number[j][i]][nb] = 1; } else if(flag) { ++nb; flag = false; } } } vN = nb; int res = hungary(); printf("%d\n",res); return 0;}
阅读全文
0 0
- Muddy Fields+POJ+二分图最大匹配
- 【二分图+最大匹配+有难度】poj 2226 Muddy Fields
- poj 2226 Muddy Fields(二分图最大匹配)
- POJ 2226 Muddy Fields(二分匹配【最大流】)
- POJ 2226 Muddy Fields 二分图巧妙建图 + 二分图最大匹配
- poj 2226 Muddy Fields 二分匹配匈牙利
- POJ 2226 Muddy Fields 二分匹配
- Poj 2226 Muddy Fields【二分匹配】
- POJ 2226Muddy Fields(二分图最大匹配之最小点覆盖)
- poj 2226 Muddy Fields 最大匹配
- poj 2226 Muddy Fields(二分图匹配)
- POJ 2226 - Muddy Fields(二分图匹配)
- POJ 2226 Muddy Fields(二分图匹配)
- poj 2226 Muddy Fields 二分图
- poj 2226 Muddy Fields(二分图)
- 【二分图】poj 2226 Muddy Fields
- POJ 2226 Muddy Fields(二分匹配-hungary)
- POJ 2226 Muddy Fields(二分匹配 巧妙的建图)
- 机器学习:R包与python的sklearn库中默认决策树模型的区别
- ajax 前台后台传输数据
- 最大字段和问题
- Linux LVM是linux逻辑卷理解
- 队列(Queue)
- poj 2226 Muddy Fields(二分图最大匹配)
- 出现:clang: error: linker command failed with exit code 1 (use -v to see invocation),解决方法
- ELK安装
- bzoj 4991 [Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组套Treap
- java中instanceof用法
- PAT
- curl 常用命令--待更新
- krpano调用网页js函数
- 《unity插件》playmaker新手使用指南