【二分图匹配入门专题1】D - Matrix hdu2119【最小顶点覆盖】

原创 2017年08月13日 06:30:21
Give you a matrix(only contains 0 or 1),every time you can select a row or a column and delete all the '1' in this row or this column . 

Your task is to give out the minimum times of deleting all the '1' in the matrix.

InputThere are several test cases. 

The first line contains two integers n,m(1<=n,m<=100), n is the number of rows of the given matrix and m is the number of columns of the given matrix. 
The next n lines describe the matrix:each line contains m integer, which may be either ‘1’ or ‘0’. 

n=0 indicate the end of input. 
OutputFor each of the test cases, in the order given in the input, print one line containing the minimum times of deleting all the '1' in the matrix. 
Sample Input

3 3 
0 0 0
1 0 1
0 1 0
0

Sample Output

2

题意:输入n行m列的数,这些数只有1或0组成,每次可以消掉一行或者一列的1,问,消灭掉全部的1最少需要进行多少次操作
思路:我二分图匹配模型还是没有转换过来,但是队友给我讲了以后,豁然开朗,矩阵的行x就相当于左集合,矩阵的列y就相当于
右集合,要使1被消灭,就相当于连通(x,y),求最少需要多少次操作可以连通所有1的(x,y)这不就是最小顶点覆盖吗。
sum没有初始化样例也能过,但是wrong了三次后才发现是这个原因,尴尬~~
#include<stdio.h>
#include<string.h>
#define N 110

int book[N],e[N][N],match[N];
int n,m;

int dfs(int u)
{
    int i;
    for(i = 1; i <= m; i ++)
    {
        if(!book[i]&&e[u][i])
        {
            book[i] = 1;
            if(!match[i]||dfs(match[i]))
            {
                match[i] = u;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    int i,j,sum;
    while(scanf("%d",&n),n!=0)
    {
        scanf("%d",&m);
        memset(match,0,sizeof(match));
        memset(e,-1,sizeof(e));
        for(i = 1; i <= n; i ++)
            for(j = 1; j <= m; j ++)
                scanf("%d",&e[i][j]);
        sum = 0;
        for(i = 1; i <= n; i ++)
        {
            memset(book,0,sizeof(book));
            if(dfs(i))
                sum ++;
        }
        printf("%d\n",sum);
    }
    return 0;
}

版权声明:转载的时候给我说一声哦~~~ 举报

相关文章推荐

poj3041 二分图最小顶点覆盖

如题:http://poj.org/problem?id=3041   Asteroids Time Limit: 1000MS   Memory Limit: 65536K...

hdu1150(二分图最小顶点覆盖)

Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

hdu 3360 National Treasures 最小顶点覆盖(最大匹配)

#include #include #include #include #include #include #include using namespace std; const int...

hdu 1054 Strategic Game 最小顶点覆盖(二分图最大匹配)

#include #include #include #include #include #include using namespace std; const int maxn=1510...

【二分图匹配】 最小点覆盖==最大匹配数

先说一下,什么叫做最小覆盖点。     在一个二分图中,一个x部或y部的覆盖点可以覆盖与之相连的所有线段,选择一些点,使得覆盖所有线段,点数最少。     König定理:最小覆盖点数==最大匹配数 ...

【POJ 3041】Asteroids

【POJ 3041】Asteroids 二分图最小顶点覆盖问题

POJ 3041 —— 最小顶点覆盖

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12929   Acc...

poj 1325 Machine Schedule(最小顶点覆盖+最大匹配)

http://poj.org/problem?id=1325 题意:有AB两台机器和k个任务,机器A有n种模式,机器B有m种模式,初始均工作在模式0,每个任务都可以由机器A的一种模式或机器B的一种模式...

Machine Schedule hdu 1150 二分图的最小点覆盖

Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others...

poj 3041

一道针对二分图zui的基本应用
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)