• HDU 2119 Matrix


    Matrix

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 3057    Accepted Submission(s): 1402

    Problem Description
    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.
     
    Input
    There 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.
     
    Output
    For 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
     二分匹配水题
    #include <iostream> 
    #include <algorithm> 
    #include <cstring> 
    #include <cstdio>
    #include <vector> 
    #include <queue> 
    #include <cstdlib> 
    #include <iomanip>
    #include <cmath> 
    #include <ctime> 
    #include <map> 
    #include <set> 
    using namespace std; 
    #define lowbit(x) (x&(-x)) 
    #define max(x,y) (x>y?x:y) 
    #define min(x,y) (x<y?x:y) 
    #define MAX 100000000000000000 
    #define MOD 1000000007
    #define pi acos(-1.0) 
    #define ei exp(1) 
    #define PI 3.141592653589793238462
    #define ios() ios::sync_with_stdio(false)
    #define INF 0x3f3f3f3f 
    #define mem(a) (memset(a,0,sizeof(a)))
    typedef long long ll;
    int a[110][110];
    int n,m,x,y;
    int vis[109];
    int pos[109];
    bool find(int x)
    {
        for(int i=1;i<=m;i++)
        {
            if(a[x][i] && !vis[i])
            {
                vis[i]=1;
                if(!pos[i] || find(pos[i]))
                {
                    pos[i]=x;
                    return true;
                }
            }
        }
        return false;
    }
    int main()
    {
        int cast=0;
        while(scanf("%d",&n)&&n)
        {
            scanf("%d",&m);
            int ans=0;
            memset(pos,0,sizeof(pos));
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                   scanf("%d",&a[i][j]);
                }
            }
            for(int i=1;i<=n;i++)
            {
                memset(vis,0,sizeof(vis));
                if(find(i)) ans++;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    解决docx4j 变量替换 由于变量存在样式式或空白字符 导致替换失败问题
    redis批量删除key 远程批量删除key
    idea 集成sonarLint检查代码bugs
    mac jmeter 的使用
    tomcat配置管理员-走后门
    终端mysql Operation not permitted错误解决方案
    update使用inner join
    hibernate 三种状态的转换
    数据库中间表插入乱序
    解决https证书验证不通过的问题
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7296002.html
Copyright © 2020-2023  润新知