POJ 2226

背景: 此题在 POJ 3041基础上 需要将连续的点看做一个点

  • 建议先做POJ 3041

题意

  • 给出nxm的网格.有空地.和泥泞*.求最少要用多少 (宽度为1的可伸长的木板) 覆盖所有的*点

思路

  • 因为木板长度可以任意伸长.所以无论是 行还是列,只要*连续就可以看成一个二分图中的点
  • 还是将作为二分图的左部.作为二分图的右部分.先求出原图每个点分别在左部分的编号和右部分的编号.
  • 等左右部分编完号后扫描原图一遍来建二分图.或者在求二分图右部分的编号时顺带建图
  • 求最大匹配.如何转化成二分图的最大匹配请先看POJ 3041思路
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>using namespace std;
const int maxn = 1e4;
char g[maxn][maxn];
int num[maxn][maxn],match[maxn],num1[maxn][maxn];
bool vis[maxn];
int n,m;
vector<int> e[maxn];void read_() {for (int i=1; i<=n; ++i) {for (int j=1; j<=m; ++j)g[i][j] = getchar();getchar();}
}int dfs(int u) {for (int i=0; i<e[u].size(); ++i) {int to = e[u][i];if (!vis[to]) {vis[to] = 1;if (!match[to] | dfs(match[to])) {match[to] = u;return 1;}}}return 0;
}void solve() {int cnt_row=1;bool flag = 0;for (int i=1; i<=n; ++i) {for (int j=1; j<=m; ++j) {if (!flag && g[i][j]=='*')num[i][j] = cnt_row;else if (flag && g[i][j]=='*') {num[i][j] = ++cnt_row;flag = 0;}elseflag=1;}if (!flag) flag=1;}int to;int cnt_col = 1;flag=0;for (int j=1; j<=m; ++j) {for (int i=1; i<=n; ++i) {if (!flag && g[i][j]=='*')num1[i][j] = cnt_col;else if (flag && g[i][j]=='*') {num1[i][j] = ++cnt_col;flag = 0;}elseflag=1;// 可以在求右部分编号时顺便建图.也可以像底下一样重新扫描一遍来建图//if (num[i][j] && num1[i][j]) e[num[i][j]].push_back(num1[i][j]);}if (!flag) flag=1;}/*for (int i=1; i<=n; ++i) {*///for (int j=1; j<=m; ++j)//cout <<"(" << num[i][j] << " " << num1[i][j] << ") ";//cout << "\n";/*}*/for (int i=1; i<=n; ++i)for (int j=1; j<=m; ++j)if (num[i][j] && num1[i][j])e[num[i][j]].push_back(num1[i][j]);int res = 0;for (int i=1; i<=cnt_row; ++i) {memset(vis,0,sizeof vis);if (dfs(i)) ++res;}cout << res << endl;
}
int main() {freopen("1.in","r",stdin);while (scanf("%d%d\n",&n,&m) != EOF) {read_();solve();}return 0;
}

POJ 2226 思维二分图相关推荐

  1. POJ 2226 二分图最小点覆盖

    题意 传送门 POJ 2226 题解 每个泥泞地需要被至少一块横着或竖着的板子覆盖,那么预处理出不能覆盖草地的限制下,所有尽可能长的横板子与竖板子.对可覆盖同一块泥泞地的 222 块板子连边,则转化为 ...

  2. 【最小点覆盖】POJ 2226:Muddy Fields

    一.题目内容 POJ 2226 原题地址 二.题意解释 告诉你一个矩阵,让你用1 * x (x 为任意值) 的木板去铺符号* 可以覆盖 问最少多少木板能够把所有的*覆盖掉 三.代码及注释 #inclu ...

  3. POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,地图中'*'代表泥地,'.'代表空地,现在我们有两种木板,一种可以覆盖一行中的任意长度,我们成为行木板,另一种可以覆盖一列中的任意长度,我们成为列木 ...

  4. 【POJ - 2226】Muddy Fields(匈牙利算法 或 网络流dinic,二分图匹配,最小点覆盖,矩阵中优秀的建图方式 )

    题干: Rain has pummeled the cows' field, a rectangular grid of R rows and C columns (1 <= R <= 5 ...

  5. POJ - 3565 Ants(二分图最小权匹配+KM+思维)

    题目链接:点击查看 题目大意:给出n个蚂蚁和n个苹果树的坐标,我们需要求出每个蚂蚁平时觅食所要去的苹果树,必须保证所有路径不能有交叉 题目分析:因为所有的边不能有交叉,所以我们选择距离最短的两个点匹配 ...

  6. POJ 2226 二分图最小覆盖

    题意: 思路: 把横着的连通块放在一个集合 竖着的放在一个集合 如果有交 就连边 求最小覆盖即可 (数值上等于最大匹配) //By SiriusRen #include <cstdio> ...

  7. poj 2226 Muddy Fields 最小顶点覆盖

    题目链接:http://poj.org/problem?id=2226 这道题跟上一道很相似不同之处在于这里不是整行或者整列的删,而是连续的几个可以一起删,不连的不能删,这就要对原图进行处理,对原有的 ...

  8. POJ 2226 Muddy Fields 最小点覆盖+加建图(好题)

    题目链接 题目一看就是最小点覆盖,这道题与POJ - 3041 算是一类题,但是3041算是一道十分裸的,因为删除的是整行或者整列,所以图其实是现成的,但是本题的难点就在如何建图. 思路:首先还是尽量 ...

  9. POJ 2195 【二分图最佳匹配】.cpp

    题意: 有 n 个房子和 n 个人 每个人走一个单元你就要付 1$ 有什么办法可以让把所有人都分派到房子里 而花费最少 输入: 给出n m 表示该矩阵由n 行 m 列组成 然后给出一个n*m的图 . ...

最新文章

  1. 【C语言】07-预处理指令;-宏定义
  2. golang strings Replace 字符串替换
  3. Entity Framework 学习结束语
  4. u8系统更改了服务器,u8修改服务器配置文件
  5. MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网络训练实现及比较(三)...
  6. 玩转Docker镜像
  7. python画曲线图-Python数据可视化之Matplotlib(折线图)
  8. 王彪20162321 2016-2017-2 《程序设计与数据结构》第4周学习总结
  9. STM32红外接收分析
  10. Lua学习(一):luac、luajit编译与反编译
  11. 检错码与纠错码,一码归一码
  12. 软件测试实验课ppt,实验十 团队作业6:团队项目用户验收Beta冲刺
  13. Verilog学习之路(11)—事件控制(时间延迟)
  14. 微信小程序 编程小结(不定期更新)
  15. Centos7 Python3.6+Qt5.12.9+ PyQt5.12+Sip v5+QScintilla-2.10+Eric6
  16. matlab 两个txt文件的合并。。
  17. java判断工作日_java 查询指定月份的工作日(不包括法定节假日)
  18. 智力过河游戏c语言,Flash AS代码实现智力过河小游戏
  19. 软件测试面试屡屡失败,面试官总是说逻辑思维混乱,怎么办?
  20. 人工智能有哪些优势?人工智能5项技术介绍

热门文章

  1. Improving Sample Efficiency In Model-Free Reinforcement Learning From Images 论文翻译
  2. 解决鼠标右键点击后菜单延迟现象
  3. 计算机专业答辩需要演示系统么,计算机专业毕业设计答辩流程.doc
  4. VMware CEO接受CBSi专访实录
  5. SAP 系统常用T-Code
  6. python:ezdxf——教程
  7. 惠普战66proG1 BIOS/固件设置Intel VT-x为enable
  8. Downie 4.6.10 mac上最好用的视频下载工具 中文版
  9. Android技术架构演进与未来
  10. java.net.SocketTimeoutException: Read timed out异常解决方法