题目:Warm up 2
题意:有横竖两种方式放着的多米诺骨牌,相同方向的不可能重叠,但是横放和竖放
的牌可能重叠。移走重叠的牌使剩下的牌最多。
分析:二分图匹配:最大独立集=顶点数-最大匹配数
横放的为一个点集,竖放的为一个点集。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std; struct node
{
int x1,y1;
int x2,y2;
}hori[1010],ver[1010];
int g[1010][1010];
int vis[1010];
int match[1010];
int m,n; bool dfs(int u)
{
int i;
for(i=0;i<m;i++)
{
if(g[u][i] && !vis[i])
{
vis[i]=true;
if(match[i]==-1||dfs(match[i]))
{
match[i]=u;
return true;
}
}
}
return false;
}
int main()
{
int i,j,cnt,ans;
while(scanf("%d%d",&n,&m)&&n&&m)
{
memset(match,-1,sizeof(match));
memset(g,0,sizeof(g));
cnt=0;
for(i=0;i<n;i++)
{
scanf("%d%d",&hori[i].x1,&hori[i].y1);
hori[i].x2=hori[i].x1+1;
hori[i].y2=hori[i].y1;
cnt++;
}
for(i=0;i<m;i++)
{
scanf("%d%d",&ver[i].x1,&ver[i].y1);
ver[i].x2=ver[i].x1;
ver[i].y2=ver[i].y1+1;
cnt++;
}
//printf("cnt=%d\n",cnt);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(hori[i].x1==ver[j].x1 && hori[i].y1==ver[j].y1)
g[i][j]=true;
else if(hori[i].x2==ver[j].x1 && hori[i].y2==ver[j].y1)
g[i][j]=true;
else if(hori[i].x1==ver[j].x2 && hori[i].y1==ver[j].y2)
g[i][j]=true;
else if(hori[i].x2==ver[j].x2 && hori[i].y2==ver[j].y2)
g[i][j]=true;
}
}
ans=0;
for(i=0;i<n;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i)) ans++;
}
//printf("ans=%d\n",ans);
printf("%d\n",cnt-ans);
}
return 0;
}
hdu 4619 Warm up 2 ( 二分图最大匹配 )的更多相关文章
-
hdu 4619 Warm up 2 二分图匹配
题目链接 给两种长方形, 水平的和垂直的, 大小都为1*2, n个水平的, m个垂直的, 给出它们的坐标. 水平的和垂直的可以相互覆盖, 但是同种类型的没有覆盖. 去掉一些长方形, 使得剩下的全部都没 ...
-
[HDU] 2063 过山车(二分图最大匹配)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2063 女生为X集合,男生为Y集合,求二分图最大匹配数即可. #include<cstdio> ...
-
HDU 1045 - Fire Net - [DFS][二分图最大匹配][匈牙利算法模板][最大流求二分图最大匹配]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1045 Time Limit: 2000/1000 MS (Java/Others) Mem ...
-
hdu 4619 Warm up 2(并查集)
借用题解上的话,就是乱搞题.. 题意理解错了,其实是坐标系画错了,人家个坐标系,我给当矩阵画,真好反了.对于题目描述和数据不符的问题,果断相信数据了(这是有前车之鉴的hdu 4612 Warm up, ...
-
HDU 4619 Warm up 2 贪心或者二分图匹配
给同一张横着的牌的所在的格子编同一样的号,这些格子对应x集合,给同一张竖着的牌所在的格子编同一样的号,对应y集合,同一个格子上既有横着的牌又有竖着的牌,那么就建一条边,有冲突就要拿走一张,结果是总的牌 ...
-
[HDU] 1068 Girls and Boys(二分图最大匹配)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1068 本题求二分图最大独立点集.因为最大独立点集=顶点数-最大匹配数.所以转化为求最大匹配.因为没有给 ...
-
HDU 4619 Warm up 2 最大独立集
Warm up 2 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4619 Description Some 1×2 dominoes are pla ...
-
hdu 4619 Warm up 2 (二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4619 题意: 平面上有一些1×2的骨牌,每张骨牌要么水平放置,要么竖直放置,并且保证同方向放置的骨牌不 ...
-
hdu 4619 Warm up 2
http://acm.hdu.edu.cn/showproblem.php?pid=4619 根据题意可知,每一个方格可能只被一个骨牌覆盖 可能被两个骨牌覆盖 也可能不被覆盖 有一个骨牌覆盖的方格(单 ...
随机推荐
-
spring mvc处理静态资源
servlet的url映射定义为'/'表示映射全部路径 struts的过滤器是*.action,在spring mvc中设置成*.action或者*.do......也是可以的,但是spring mv ...
-
C语言-03-流程控制
一.选择结构 1> if语句 使用注意 ① if语句中的条件语句,不要把==和=弄混,可以把常量作为左值, 这样的话,在无用=的情况下,编译时会报错 ② if语句后若要定义新的变量或者有多条语句 ...
-
安装qmake与环境变量解析
转自:http://www.kuqin.com/qtdocument/qmake-manual-2.html 安装qmake 当Qt被连编的时候,默认情况下qmake也会被连编. 这一部分解释如何手工 ...
-
Object-C Init
上一篇为Object-C类实现 我们可以创建一个init方法用来给我们的实例变量设置初始化值: - (id)init { if(self = [super init]) { [self setCapt ...
-
C#反射调用程序集类中方法
建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x ...
-
loadrunner常用函数总结
事务函数:lr_end_sub_transaction 标记子事务的结束以便进行性能分析lr_end_transaction 标记 LoadRunner 事务的结束lr_end_transaction ...
-
JSP模板文本
JSP模板文本: http://book.51cto.com/art/200907/136020.htm JSP页面就是带有JSP元素的常规Web页面,它是由JSP模版文本和JSP元素组成的.在一个J ...
-
[转载]转载一篇好文章作为Java与面向对象之随感(3)
关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没法很 ...
-
洛谷P3434 [POI2006]KRA-The Disks(线段树)
洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直 ...
-
Mongodb分片集群技术+用户验证
随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...