hdoj 2119 Matrix 【行列匹配 求解最小点覆盖】【基础题】
2015-09-15 23:09
295 查看
MatrixTime 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. 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 |
水题吧,最小点覆盖 = 最大匹配。直接一次匈牙利就ok了。
AC代码:
#include <cstdio> #include <cstring> #include <algorithm> #define MAXN 101 using 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; }
相关文章推荐
- 安卓中炫酷的UI特效
- UVa 437:The Power of Babylon(DP)
- 转载的,讲解java.util的集合类
- 云计算(1)
- 一些常用的正则表达式
- ROS 多机器运行及通信
- iOS App图标和启动画面尺寸
- Fragment生命周期详解
- Python学习笔记2--模式匹配
- OC中的属性特征
- HDU 4085 斯坦纳树
- STL之remove、remove_copy、remove_if、remove_copy_if
- String与InputStream相互转换 小结
- Unity3D在Mac OS X中如何打开两个窗口
- Redis数据类型和抽象介绍
- 随笔随心
- NetBeans实现的简单计算器
- Linux:用户&用户组操作
- LeetCode Best Time to Buy and Sell Stock
- Context.PROVIDER_URL的写法