二分图行列匹配---> 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 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...
随机推荐
- String[255]在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串(内含许多实验测试)
学了好多不了解的知识: procedure TForm1.Button1Click(Sender: TObject); var s1 : String; s2 : String[]; begin s1 ...
- javascript实现的可改变滚动方向的无缝滚动
效果图如下: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- qt+boost::asio+tcp文件传输
客户端: void qt_boost::pbSendFileClicked(){ QString filename = ui.leFileName->text(); QByteArray ba ...
- C++内存管理学习笔记(6)
/****************************************************************/ /* 学习是合作和分享式的! /* Auth ...
- <Win32_14>__win32控件(2)__教你自学掌握所有控件的玩法
学习win32 API 编程,我们应该善于利用微软给我们提供的一些辅助工具,例如大家都知道的MSDN.SPY++等等. 今天在讲述之前呢,先给大家介绍一个很有用的工具——Control Spy——它的 ...
- jquery中实现全选按钮
<html> <head> <script type='text/javascript' src='js/jquery-1.5.1.js'></scr ...
- IE与FF脚本兼容性问题
(1) window.event: 表示当前的事件对象,IE有这个对象,FF没有,FF通过给事件处理函数传递事件对象 (2) 获取事件源 IE用srcElement获取事件源,而FF用target获取 ...
- 最佳新秀SSH(十三)——Spring集装箱IOC分析和简单的实现
时间最近一段时期,"集装箱"这个词一直萦绕在我的耳边,连吃饭.睡在我的脑海里蹦来蹦去的. 由于这几天的交流时间.讨论,对于理解容器逐渐加深. 理论上的东西终归要落实到实践,今天就借 ...
- DIV固定在页面某个位置,不随鼠标滚动而滚动
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org ...
- hdu1506(dp求最大子矩阵)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506 分析: 对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下 ...