题意:每个 ‘*’都需要一个1*2的东西覆盖,问最少需要多少个1*2的东西来覆盖这些‘*’

分析:只需要求出来最多有多少个完全覆盖的,然后加上那些不能被完全覆盖的点即可。。把G题的代码随便修改了一下就过了.....
*********************************************************************
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std; const int MAXN = 1005;///处理后点的个数
const int MAXM = 50;///原图大小
const int oo = 1e9+7; char G[MAXM][MAXM]; int N, M;///保存原图
int  Index[MAXM][MAXM];///给点编号 struct Edge{int v, next;}e[MAXN*4];
int Head[MAXN], cnt;///处理后的边 int Mx[MAXN], My[MAXN];///记录与之匹配的点
int used[MAXN], dx[MAXN], dy[MAXN];///dx,dy记录DFS后的深度
int depth, NX;///款搜的深度,和点的个数 void InIt()
{///初始化
    NX = cnt = 0;     memset(Head, -1, sizeof(Head));
    memset(Mx, false, sizeof(Mx));
    memset(My, false, sizeof(My));
}
void AddEdge(int u, int v)
{///添加边
    e[cnt].v = v;
    e[cnt].next = Head[u];
    Head[u] = cnt++;
}
bool BFS()
{///广搜求出层次,并且判断是否有增广路存在
    queue<int> Q;
    depth = oo;     memset(dx, false, sizeof(dx));
    memset(dy, false, sizeof(dy));     for(int i=1; i<=NX; i++)
    {
        if( Mx[i] == false )
        {
            dx[i] = true;
            Q.push(i);
        }
    }     while(Q.size())
    {
        int u = Q.front(); Q.pop();         if( dx[u] > depth )break;///已经发现上层存在增广路         for(int j=Head[u]; j!=-1; j=e[j].next)
        {
            int v = e[j].v;
            if( dy[v] == false )
            {
                dy[v] = dx[u] + 1;                 if(My[v] == false)
                    depth = dy[v];
                else
                {
                    dx[ My[v] ] = dy[v] + 1;
                    Q.push( My[v] );
                }
            }
        }
    }     return depth != oo;
}
bool DFS(int i)
{
    for(int j=Head[i]; j!=-1; j=e[j].next)
    {
        int v = e[j].v;         if( used[v] == false && dx[i] == dy[v]-1 )
        {
            used[v] = true;///开始忘记置为访问过错了一次             if( My[v] && dy[v] == depth )
                continue;
            if( !My[v] || DFS(My[v]))
            {
                My[v] = i;
                Mx[i] = v;                 return true;
            }
        }
    }     return false;
}
int  Karp()
{
    int ans = 0;     while( BFS() == true )
    {
        memset(used, false, sizeof(used));
        for(int i=1; i<=NX; i++)
        {
            if( !Mx[i] && DFS(i) )
                ans++;
        }
    }     ///因为点同时在两边,所以会重复一次,结果应该出去 2
    return ans / 2;
} int main()
{
    int i, j, T;     scanf("%d", &T);     while(T--)
    {
        scanf("%d%d", &M, &N);         int sum = 0;///记录 ‘*’个数
        InIt();         for(i=0; i<M; i++)
        {
            scanf("%s", G[i]);
            for(j=0; j<N; j++)
            {
                if(G[i][j] == '*')
                {///购置关系图
                    Index[i][j] = ++NX;///给点编号
                    sum++;
                    if(j != 0 && G[i][j-1] == '*')
                    {///与左边的可以匹配
                        AddEdge(Index[i][j], Index[i][j-1]);
                        AddEdge(Index[i][j-1], Index[i][j]);
                    }                     if(i != 0 && G[i-1][j] == '*')
                    {///与上面的可以匹配
                        AddEdge(Index[i][j], Index[i-1][j]);
                        AddEdge(Index[i-1][j], Index[i][j]);;
                    }
                }
            }
        }         int ans = Karp();         printf("%d\n", sum-ans);
    }     return 0; } 

H - Antenna Placement- hdu 3020(二分图匹配)的更多相关文章

  1. Antenna Placement POJ - 3020 二分图匹配 匈牙利 拆点建图 最小路径覆盖

    题意:图没什么用  给出一个地图 地图上有 点 一次可以覆盖2个连续 的点( 左右 或者 上下表示连续)问最少几条边可以使得每个点都被覆盖 最小路径覆盖       最小路径覆盖=|G|-最大匹配数 ...

  2. Antenna Placement poj 3020

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12104   Accepted: 595 ...

  3. Antenna Placement POJ - 3020 (最小边集覆盖)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10699   Accepted: 526 ...

  4. hdu 2063 二分图匹配

    题意:一些女的和一些男的有好感,有好感的能一起坐过山车,问最多能组成多少对 hdu 11 页上少有的算法题,二分图匹配问题,匈牙利算法,对于每一个汉子,看和他有好感的妹子有没有配对了,没有配对过就可以 ...

  5. hdu 1281 二分图匹配

    题目:在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下.但是某些格子若不放子,就 无法保证放尽量多的“车”,这样的格子被称做重要点 ...

  6. (匹配 二维建图) Antenna Placement --POJ --3020

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ...

  7. (匹配)Antenna Placement --POJ --3020

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ...

  8. Antenna Placement poj 3020(匹配)

    http://poj.org/problem?id=3020 题意:给定一个n*m的矩阵,'*'代表城市,现在想要用1*2的矩阵将所有的城市覆盖,问最少需要多少个矩阵? 分析:先为每个城市进行标号,再 ...

  9. hdu 1507(二分图匹配)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  10. hdu 4185 二分图匹配

    题意用1*2的木板覆盖矩阵中的‘#’,(木板要覆盖的只能是‘#’),问最多能用几个木板覆盖 将#抽象为二分图的点,一个木板就是一个匹配,注意最后结果要除以2 Sample Input 1 6 .... ...

随机推荐

  1. Facade 门面模式 外观模式

    简介 作用: (1)封装一组交互类,一致地对外提供接口 (2)封装子系统,简化子系统调用 JDK中体现:java.util.logging包 java.lang.Class javax.faces.w ...

  2. python面对对象编程---------6:抽象基类

    抽象基本类的几大特点: 1:要定义但是并不完整的实现所有方法 2:基本的意思是作为父类 3:父类需要明确表示出那些方法的特征,这样在写子类时更加简单明白 用抽象基本类的地方: 1:用作父类 2:用作检 ...

  3. WebService笔记-Schema约束

                        Schema约束 俗话说得好 好记性不如烂笔头. 看了下WebService视频,觉得还是得下笔记. 观看的视频地址:http://edu.51cto.com/ ...

  4. META http-equiv 大全

    META http-equiv 大全 HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容.常用的HTTP-EQUIV类型有: 1.Content ...

  5. RB1001: IE6 IE7 IE8(Q) 负边距 (margin) 导致元素溢出 hasLayout 容器时显示异常

    标准参考 根据W3C CSS2.1规范第8.3节中的描述,边距属性设置了一个框的边距区的宽度.'margin' 缩写属性设置所有四边的边距,而其它的边距属性( 'margin-top' ,'margi ...

  6. underscorejs-indexBy学习

    2.19 indexBy 2.19.1 语法 _.indexBy(list, iteratee, [context]) 2.19.2 说明 给定一个list,和 一个用来返回一个在列表中的每个元素键 ...

  7. jQuery 图片轮播

    HTML <div class="carousel">    <ul class="car-img">        <li> ...

  8. w3wp异常

    相信做ASP.NET中大型Web应用的人都碰到过OutOfMemoryException这个异常,对于这个问题我研究了很久,在微软的技术文档上也了解过此问题出现的原因,说实话,到目前我仍然没有完美的解 ...

  9. 导出页面文档(只在IE8下测试过)

    之前说过一篇关于打印的方法,就顺便也看了一下导出,但是该方法需要用户更改浏览器的安全级别设置,因此并不十分推荐,大家如真有需要可以参考一下ZeroClipboard这款插件,我有时间也会去学习一下并贴 ...

  10. 多台web服务器之间共享session

    常见的几种方法如下: 1. 写客户端Cookie的方式 当用户登陆成功以后,把网站域名.用户名.密码.token.session有效时间全部采用cookie的形式写入到客户端的cookie里面,如果用 ...