二分图行列匹配---> hdu2119,hdu1498
hdu2119
题意:给定一个矩形方格,每个格子里面的数字是0或者1,每次操作可以把一整行或列的1变成0,问最少多少次操作能将1全部变为0
一次可以消除某一行或者某一列的1
但是可以这么想,最多有多少个1即不在同一行,也不在同一列,有多少个,那么就要消多少次
那么就是求行和列的最大匹配
#include <stdio.h>
#include <string.h>
const int N = + ;
int Map[N][N];
bool vis[N];
int cy[N];
int n,m;
bool dfs(int u)
{
for(int i=; i<m; ++i)
{
if(!vis[i] && Map[u][i])
{
vis[i] = true;
if(cy[i] == - || dfs(cy[i]))
{
cy[i] = u;
return true;
}
}
}
return false;
}
int MaxMatch()
{
memset(cy, -, sizeof(cy));
int ans = ;
for(int i=; i<n; ++i)
{
memset(vis, , sizeof(vis));
ans += dfs(i);
}
return ans;
}
int main()
{
int i,j;
while(true)
{
scanf("%d",&n);
if(n == )
break;
scanf("%d",&m);
for(i=; i<n; ++i)
for(j=; j<m; ++j)
{
scanf("%d",&Map[i][j]);
}
int ans = MaxMatch();
printf("%d\n",ans);
}
}
hdu1498
比上面那题复杂一点,不过也是一样,每次只能消一行或者一列相同颜色的气球
一共就50中颜色,我们可以枚举每一种颜色构成的矩形,然后对其进行行列匹配,如果最大匹配 > k , 那么就不能在k次内完全消除该种颜色的气球
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
const int N = + ;
const int M = + ;
int Map[M][N][N];
int color[M];
bool vis[N];
int cy[N];
int ans[M];
vector<int> G[N];
int cnt;
int n,k;
void init()
{
for(int i=; i<n; ++i)
G[i].clear(); }
bool dfs(int u)
{
for(int i=; i<G[u].size(); ++i)
{
int v = G[u][i];
if(!vis[v])
{
vis[v] = true;
if(cy[v] == -||dfs(cy[v]))
{
cy[v] = u;
return true;
}
}
}
return false;
}
int MaxMatch()
{
memset(cy, -, sizeof(cy));
int cnt = ;
for(int i=; i<n; ++i)
{
memset(vis, , sizeof(vis));
cnt += dfs(i);
}
return cnt;
}
int main()
{
//freopen("in.txt","r",stdin);
int i,j;
while(true)
{
scanf("%d%d",&n,&k);
if(n == && k==)
break;
int t;
memset(Map, , sizeof(Map));
memset(color, , sizeof(color));
cnt = ;
for(i=; i<n; ++i)
for(j=; j<n; ++j)
{
scanf("%d",&t);
Map[t][i][j] = ;
color[t] = ;
}
for(t=; t<=; ++t)
if(color[t])//枚举每一种颜色构成的矩阵
{
init();
for(i=; i<n; ++i)
for(j=; j<n; ++j)
{
if(Map[t][i][j] == )
G[i].push_back(j);//用vector存储
}
int tmp = MaxMatch();
if(tmp > k)
ans[cnt++] = t;
}
if(cnt == )
puts("-1");
else
{
printf("%d",ans[]);
for(i=; i<cnt; ++i)
printf(" %d",ans[i]);
puts("");
}
}
return ;
}
二分图行列匹配---> hdu2119,hdu1498的更多相关文章
- kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树
二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j ...
- UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)
UVA 11383 - Golden Tiger Claw 题目链接 题意:给定每列和每行的和,给定一个矩阵,要求每一个格子(x, y)的值小于row(i) + col(j),求一种方案,而且全部行列 ...
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- 【POJ 1698】Alice's Chance(二分图多重匹配)
http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...
- 稳定的奶牛分配 && 二分图多重匹配+二分答案
题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...
- hiho 第117周 二分图多重匹配,网络流解决
描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...
- UVALive 4043 Ants(二分图完美匹配)
题意:每个蚁群有自己的食物源(苹果树),已知蚂蚁靠气味辨别行进方向,所以蚁群之间的行动轨迹不能重叠.现在给出坐标系中n个蚁群和n棵果树的坐标,两两配对,实现以上要求.输出的第 i 行表示第 i 个蚁群 ...
- HDU 1498 50 years, 50 colors (行列匹配+最小顶点覆盖)
题目:点击打开链接 题意:每个格子有不同颜色的气球用不同数字表示,每次可选某一行 或某一列来戳气球.每个人有K次机会.求最后哪些气球不能在 k次机会内 ...
- 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
[题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...
随机推荐
- C++ 对象的内存布局(上)
C++ 对象的内存布局(上) 陈皓 http://blog.csdn.net/haoel 点击这里查看下篇>>> 前言 07年12月,我写了一篇<C++虚函数表解析>的文 ...
- 【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据
原文:[ASP.NET Web API教程]5.2 发送HTML表单数据:URL编码的表单数据 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...
- 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)
郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...
- java面向对象下:Java数据库编程
19.Java数据库编程: JDBC概述: JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...
- disruptor流程
这里先不提那些编译器方面的优化.只看一下基于无锁环形队列的生产者消费者模型的工作流程.上一个图先: 当中,buffer是一个数组,用来模拟环形队列. slowest_reader记录最慢的reader ...
- Android 系统搜索框(有浏览记录)
实现Android 系统搜索框(有浏览记录),先看下效果: 一.配置搜索描述文件 要在res中的xml文件加创建sreachable.xml,内容如下: <?xml version=" ...
- 2013Esri全球用户大会之ArcGIS for Desktop
Q1:ArcGIS 10.2 for Desktop中有哪些新特性? 增强的质量和性能 扩展并行处理能力 许多软件质量的改进 优化的文件处理 ...
- 利用手工编码的方式对srtus2进行输入验证
对action方法进行校验有两种方法一种是: 1手工编码书写 2一种是用xml 输入校验的流程: 1类型转化器对请求参数执行类型转化,并把转换后的值赋给action属性. 2.如果执行类型转化的过程中 ...
- thinkphp 3.2.3 入门示例
原文:thinkphp3.2 1.安装WAMPServer,到D:\wamp\. 2.下载ThinkPHP3.2.3核心版.解压缩后,放到D:\wamp\www\MyWeb\.打开浏览器,输入网址:h ...
- Spring常见面试问题 (转)
Spring 1. Spring工作机制及为什么要用?Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.Spring既是一个AOP框架,也是一IOC容器.SpringFramew ...