二分图行列匹配---> 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 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...
随机推荐
- Struts2 学习笔记18 拦截器原理分析
我们来进行一下拦截器的原理分析,从Struts2的源代码开始,然后我们手动创建一个项目进行模拟.(源代码需要下载然后添加好才能看到)我们可以用Debug来读源码. 从doFilter开始执行,流程如图 ...
- python中逐行读取文件的最佳方式_Drupal_新浪博客
python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式 (2010-08-18 15:59:28) 转载▼ 标签: python ...
- 下载jdk文件后缀是.gz而不是.tar.gz怎么办
用chrom浏览器下载了linux版的jdk,发现文件后缀是.gz,没看过这玩意,一打开,还是一个.gz文件,原本以为是新文件后缀呢.那个百度google啊. . ..最后都没发现有这方面的资料啊.. ...
- 鸟哥Linux私房菜知识点总结6到7章
近期翻看了一本<鸟哥的Linux私房菜>.这是一本基础的书,万丈高楼平地起.会的不多但能够学.这是我整理的一些知识点.尽管非常基础.希望和大家共同交流. 第6章主机规划与磁盘分区 1.在进 ...
- spring MVC拦截器01
spring MVC拦截 作用:身份校验,权限检查,防止非法訪问. 场景:一个bbs系统,用户没有登录就无法发帖或者删除评论; 一个博客系统,没有登录就无法发表博文,无法添加分类,无法删除博文. sp ...
- Linux for周期运行命令注意事项
假定for有一些符号循环指令,需要使用()封闭. for i in {1..4}; do (python /data/UGCRobot/manage/Scheduler.py 1.log > / ...
- MBR格式无法识别2T以上的硬盘的问题
早上有人打电话说四块2T的sata 硬盘做了raid 5之后安装window server 2012的时候,无法创建分区,安装完系统后无法给剩余的硬盘创建分区,刚开始的时候我还以为是别人分区的数量问题 ...
- SE 2014年5月23日
两站点 A 和 B,由于业务往来需要,所以工程师提出vpn技术,同时需要保证业务流在internet上的安全性,同时在这里站点均为固定ip地址. 通过分析以上信息,确定这里使用 IPSec VPN的主 ...
- 调用WCF的异步方法
原文:调用WCF的异步方法 AsyncCallback aLoginCallback = delegate(IAsyncResult result) { var aSystemUser = WcfCl ...
- 通过 Jersey Http请求头,Http响应头,客户端 API 调用 REST 风格的 Web 服务
原地址:http://blog.csdn.net/li575098618/article/details/47853263 Jersey 1.0 是一个开源的.可以用于生产环境的 JAX-RS(RES ...