hdoj 2119 Matrix 【行列匹配 求解最小点覆盖】【基础题】
来源:互联网 发布:工作日记记事本软件 编辑:程序博客网 时间:2024/06/06 14:19
Matrix
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2234 Accepted Submission(s): 992
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.
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.
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 01 0 10 1 00
Sample Output
2
题意:给你一个N*M的矩阵,矩阵里面有一些位置是1。每次操作可以划去同一行或者同一列的1,问你最少需要几次操作。
水题吧,最小点覆盖 = 最大匹配。直接一次匈牙利就ok了。
AC代码:
#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 101using namespace std;int Map[MAXN][MAXN];int pipei[MAXN];bool used[MAXN];int N, M;void getMap(){ int a; memset(Map, 0, sizeof(Map)); for(int i = 1; i <= N; i++) { for(int j = 1; j <= M; j++) { scanf("%d", &a); if(a) Map[i][j] = 1;//建立关系 } }}int DFS(int x){ for(int i = 1; i <= M; i++) { if(Map[x][i] && !used[i]) { used[i] = true; if(pipei[i] == -1 || DFS(pipei[i])) { pipei[i] = x; return 1; } } } return 0;}void solve(){ int ans = 0; memset(pipei, -1, sizeof(pipei)); for(int i = 1; i <= N; i++) { memset(used, false, sizeof(used)); ans += DFS(i); } printf("%d\n", ans);}int main(){ while(scanf("%d", &N), N) { scanf("%d", &M); getMap(); solve(); } return 0;}
0 0
- hdoj 2119 Matrix 【行列匹配 求解最小点覆盖】【基础题】
- hdoj--2119--Matrix(最小点覆盖)
- hdu 2119 Matrix【最小点覆盖-二分匹配】
- HDU149850 years, 50 colors(行列匹配+最小点覆盖)
- Matrix hdu 2119 最小点覆盖
- HDU 2119 Matrix 最小点覆盖
- pku2226 最小点集覆盖,行列覆盖
- 行列覆盖,最小点集覆盖
- HDU2119 Matrix 【最小点覆盖】
- hdu 2119 Matrix 行列匹配
- POJ 1325 简单基础匈牙利二分匹配:最小点覆盖
- HDU 2119 Matrix [二分图匹配之最小覆盖]
- 【uva 12549】Sentry Robots HDU 2119 (hdu 2119Matrix升级版) 最小点覆盖+二分图匹配
- hdu 2063 过山车 + hdu 2119 Matrix (二分图的最大匹配边和最小覆盖点)
- HDU 2119 Matrix【二分图之最小点集覆盖】
- hdu 2119 Matrix 二分图 最小点覆盖
- HDU 2119 Matrix 二分图最小点覆盖
- hdu2119—Matrix(最小点覆盖)
- 实现秒杀的几个想法
- Socket原理与编程基础
- 异步选择模型
- WebLogic配置JNDI数据源以及如何在应用程序中使用配置好的JNDI数据源
- html5新增标签
- hdoj 2119 Matrix 【行列匹配 求解最小点覆盖】【基础题】
- Redis数据类型和抽象介绍
- Context.PROVIDER_URL的写法
- 为cmd创建快捷键
- 安卓中炫酷的UI特效
- NetBeans实现的简单计算器
- Unity3D在Mac OS X中如何打开两个窗口
- STL之remove、remove_copy、remove_if、remove_copy_if
- Python学习笔记2--模式匹配