参考博客:https://blog.csdn.net/liujc_/article/details/51287019

参考博客:https://blog.csdn.net/acdreamers/article/details/8621130

题目来源:http://poj.org/problem?id=2226

题意:

给你一个地图,用宽为一长随意的棒子横或竖地填满所有的  “*”   且不能填”.“

求最少的棒子数

题解:

每个* 都有一个需求,即有横的或竖的棒子经过它,对于每个点,建立一条边和两个二分图的点。求最小顶点覆盖==最大匹配

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
char ma[55][55];
int match[55*55];
int n,m;
bool used[55*55];
vector<int>g[55*55];
bool dfs(int x)
{
if(used[x])return 0;
used[x]=1;
for(int i=0;i<g[x].size();i++)
{
int V=g[x][i];
if(match[V]==0||dfs(match[V]))
{
match[V]=x;
return 1;
}
}
return 0;
}
int guar()
{
int res=0;
for(int i=1;i<=n*m;i++)
{
for(int j=1;j<=n*m;j++)used[j]=0;
if(dfs(i))res++;
}
return res;
}
int main()
{
while(cin>>n>>m)
{ for(int i=0;i<55*55;i++)
{
g[i].clear();
match[i]=0;
}
// cout<<n<<" "<<m<<endl; for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>ma[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(ma[i][j]=='*')
{
int y=i,x=j;
while(x>1&&ma[i][x-1]=='*')x--;
while(y>1&&ma[y-1][j]=='*')y--;
g[(i-1)*m+x].push_back((y-1)*m+j);
}
}
cout<<guar()<<endl;
} }

  

poj2226 Muddy Fields 填充棒子(二分匹配)的更多相关文章

  1. POJ2226 Muddy Fields 二分匹配 最小顶点覆盖 好题

    在一个n*m的草地上,.代表草地,*代表水,现在要用宽度为1,长度不限的木板盖住水, 木板可以重叠,但是所有的草地都不能被木板覆盖. 问至少需要的木板数. 这类题的建图方法: 把矩阵作为一个二分图,以 ...

  2. POJ2226 Muddy Fields

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10149   Accepted: 3783 Description Rain ...

  3. [USACO2005][POJ2226]Muddy Fields(二分图最小点覆盖)

    题目:http://poj.org/problem?id=2226 题意:给你一个字符矩阵,每个位置只能有"*"或者“.",连续的横着或者竖的“*"可以用一块木 ...

  4. POJ2226 Muddy Fields(二分图最小点覆盖集)

    题目给张R×C的地图,地图上*表示泥地..表示草地,问最少要几块宽1长任意木板才能盖住所有泥地,木板可以重合但不能盖住草地. 把所有行和列连续的泥地(可以放一块木板铺满的)看作点且行和列连续泥地分别作 ...

  5. poj 2226 Muddy Fields (二分匹配)

    Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7340   Accepted: 2715 Desc ...

  6. poj Muddy Fields

    Muddy Fields 原题去我创的专题里找,在文件夹首页. 题目: 给出N*M矩阵.当中*表示泥土,.表示小草.要你用最少的木板把泥土覆盖. 木板长度不限.可是仅仅能水平和竖直. 行列式二分匹配配 ...

  7. TTTTTTTTTTTTTTTTT POJ 2226 草地覆木板 二分匹配 建图

    Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9754   Accepted: 3618 Desc ...

  8. [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  9. poj 2226 Muddy Fields (转化成二分图的最小覆盖)

    http://poj.org/problem?id=2226 Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

随机推荐

  1. Flask中的CBV

    Flask中的CBV 第一种 class Index(views.MethodView): methods = ['GET', 'POST'] decorators = [] def get(self ...

  2. Call to a member function display() on a non-object问题的解决

    在使用ThinkPHP做项目的时候,出现了如下 的报错: 报错是Call to a member function display() on a non-object.我的代码是: 查看了ThinkP ...

  3. IIS下MySQL停止和启动的方法

    mysql服务的启动与停止:点击开始--运行,输入services.msc , 在弹出的服务窗口中,找到mysql服务,直接点击左侧对应  的就可以了 如下图所示:

  4. 【PAT】B1004 成绩排名

    简单题 循环输入放入结构体数组,一个sort搞定 #include <stdio.h> #include<algorithm> using namespace std; str ...

  5. python中------decode解码出现的0xca问题解决方法

    一.错误: 解决方法: #源代码 data = sk.recv(1024) print(str(data,'gbk')) #修改代码 data = sk.recv(1024) print(str(da ...

  6. Python闭包和装饰器再复习

    闭包 闭包的定义 在一个外函数中定义了一个内函数,并且内函数用到了外部函数的变量,而且外函数的返回值是内函数的引用,这就构成了一个闭包. 一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东 ...

  7. Java多线程(二)关于多线程的CPU密集型和IO密集型这件事

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  8. (转)Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏

    http://www.ityouknow.com/springboot/2018/04/02/docker-favorites.html 云收藏项目已经开源2年多了,作为当初刚开始学习 Spring ...

  9. Scrapy 框架 使用 selenium 爬取动态加载内容

    使用 selenium 爬取动态加载内容 开启中间件 DOWNLOADER_MIDDLEWARES = { 'wangyiPro.middlewares.WangyiproDownloaderMidd ...

  10. 如何弄清Linux系统运行何种系统管理程序

    如何弄清Linux系统运行何种系统管理程序 虽然我们经常听到系统管理器System Manager这词,但很少有人深究其确切意义.现在我们将向你展示其区别. 我会尽自己所能来解释清楚一切.我们大多都知 ...