hdu 4619 Warm up 2 ( 二分图最大匹配 )
题目: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 根据题意可知,每一个方格可能只被一个骨牌覆盖 可能被两个骨牌覆盖 也可能不被覆盖 有一个骨牌覆盖的方格(单 ...
随机推荐
- 【HDU1754】I Hate It(线段树)
update:单点替换 query:区间最值 #include <iostream> #include <cstring> #include <cstdlib> # ...
- OpenStackCLI调试及术语识记
1,Project are organizational units in the cloud,and are also known as tenants or accounts.Each user ...
- Java日志终极指南
Java日志基础 Java使用了一种自定义的.可扩展的方法来输出日志.虽然Java通过java.util.logging包提供了一套基本的日志处理API,但你可以很轻松的使用一种或者多种其它日志解决方 ...
- POJ 1742 Coins(多重背包) DP
参考:http://www.hankcs.com/program/cpp/poj-1742-coins.html 题意:给你n种面值的硬币,面值为a1...an,数量分别为c1...cn,求问,在这些 ...
- Install Cocos2d-x v3.3 on Ubuntu 14.04 & Ubuntu 14.10(转)
Install Cocos2d-x v3.3 on Ubuntu 14.04 & Ubuntu 14.10 1 get the source code sudo apt-get install ...
- Javascript 解构的用处
对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量. let { log, sin, cos } = Math; 上面代码将Math对象的对数.正弦.余弦三个方法,赋值到对应的变量上,使用起 ...
- hadoop多文件输出
现实环境中,经常遇到一个问题就是想使用多个Reduce,可是迫于setup和cleanup在每个Reduce中会调用一次,仅仅能设置一个Reduce,无法是实现负载均衡. 问题,假设要在reduce中 ...
- Ubuntu的防火墙UFW
这是个简单的防火墙,可以直接在命令行启停,也可安装提图形端gufw *安装 sudo apt-get install ufw gufw *常用命令 sudo ufw enable //启动 ufw d ...
- js中json的转换
//aa='{"id":0,"appId":"app***********Id","appSecret":"a ...
- [跟我学spring][Bean的作用域]
Bean的作用域 什么是作用域呢?即“scope”,在面向对象程序设计中一般指对象或变量之间的可见范围.而在Spring容器中是指其创建的Bean对象相对于其他Bean对象的请求可见范围. Sprin ...