hdu 2119 Matrix 二分图 最小点覆盖
来源:互联网 发布:数据库的基本对象是 编辑:程序博客网 时间:2024/04/29 06:34
题目链接
大意:给你一个0/1矩阵,以及一把枪,一枪可以打掉同一行或者同一列上的1,问你最少几次可以把1全部变为0?
思路:我们以x,y轴为顶点建立二分图,如果数字为1的话,那么就连一条边,其实就转换成了最小顶点覆盖的问题,然后求二分最大匹配即可.
#include <stdio.h>#include <string.h>#include <math.h>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;const int maxn = 205;const int Mod = 1000000007;int n,m;bool vis[maxn];int cx[maxn],cy[maxn];int map[maxn][maxn];int findpath( int u ){for( int i = 1; i <= m; i ++ ){if( map[u][i] && !vis[i] ){vis[i] = 1;if( cy[i] == -1 || findpath( cy[i] ) ){cy[i] = u;cx[u] = i;return true;}}}return false;}int MaxMatch(){int ans = 0;memset( cx,-1,sizeof(cx) );memset( cy,-1,sizeof(cy) );for( int i = 1; i <= n; i ++ ){if( cx[i] == -1 ){memset( vis,0,sizeof(vis) );ans += findpath( i );}}return ans;}int main(){#ifndef ONLINE_JUDGE freopen("data.txt","r",stdin); #endifwhile( scanf("%d",&n) != EOF,n ){scanf("%d",&m);memset(map,0,sizeof(map));for( int i = 1; i <= n; i ++ ){for( int j = 1; j <= m; j ++ ){scanf("%d",&map[i][j]);}}printf("%d\n",MaxMatch());}return 0;}
0 0
- HDU 2119 Matrix【二分图之最小点集覆盖】
- hdu 2119 Matrix 二分图 最小点覆盖
- HDU 2119 Matrix 二分图最小点覆盖
- hdu 2119 Matrix【最小点覆盖-二分匹配】
- HDU 2119 Matrix(二分图最小边覆盖)
- HDU 2119--Matrix【二分图 && 最小点数覆盖】
- HDU 2119 Matrix(二分图最小边覆盖)
- HDU 2119 Matrix [二分图匹配之最小覆盖]
- HDU 2119 Matrix(二分图最小顶点覆盖)
- Matrix hdu 2119 最小点覆盖
- HDU 2119 Matrix 最小点覆盖
- 【uva 12549】Sentry Robots HDU 2119 (hdu 2119Matrix升级版) 最小点覆盖+二分图匹配
- hdu 2063 过山车 + hdu 2119 Matrix (二分图的最大匹配边和最小覆盖点)
- HDU 4160 二分图最小点覆盖
- hdu 2119 二分图匹配之最小点集覆盖
- hdu Matrix(二分图的最小路径覆盖)
- hdu 2119 Matrix (最小覆盖)
- hdu 1150 二分图 最小点覆盖=最大匹配
- Visual Prolog 的 Web 专家系统 (9)
- 刘鹏计算广告学听课笔记 第二章:合约广告系统(二)
- 《FusionCharts学习及使用笔记》
- Centos中安装.SSH安装,配置以及使用
- hdu1885
- hdu 2119 Matrix 二分图 最小点覆盖
- 6个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。他们决定这么分:
- git配置和简单使用
- Qt 文件读写
- hdu 1312(艰辛的debug之路/其实题目很简单)
- 隐藏TabBar的一些方法小结
- linux里的backlog详解
- 192.0x00c8.0x00c8.0x00fa
- hadoop云盘客户端的设计与实现(三)