hdu 4619 Warm up 2 二分图匹配
给两种长方形, 水平的和垂直的, 大小都为1*2, n个水平的, m个垂直的, 给出它们的坐标。 水平的和垂直的可以相互覆盖, 但是同种类型的没有覆盖。 去掉一些长方形, 使得剩下的全部都没有覆盖, 求剩下的数量的最大值。
如果一个水平的和一个垂直的相互覆盖, 那么它们之间连一条边, 然后匈牙利匹配求出最大匹配数num, ans = n+m-num;
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, n, a) for(int i = a; i<n; i++)
#define fi first
#define se second
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-;
const int mod = 1e9+;
const int inf = ;
const int dir[][] = { {-, }, {, }, {, -}, {, } };
pll a[], b[];
const int maxn = 1e5+;
int head[maxn*], num;
struct node
{
int to, nextt;
}e[maxn*];
void add(int u, int v) {
e[num].to = v, e[num].nextt = head[u], head[u] = num++;
}
void init() {
num = ;
mem1(head);
}
int judge(pll x, pll y) {
if(x.first == y.first&&x.second==y.second)
return ;
if(x.first+ == y.first&&x.second==y.second)
return ;
if(x.fi == y.fi && x.se == y.se+)
return ;
if(x.fi+ == y.fi&&x.se==y.se+)
return ;
return ;
}
int path[maxn], vis[maxn];
int dfs(int u) {
for(int i = head[u]; ~i; i = e[i].nextt) {
int v = e[i].to;
if(!vis[v]) {
vis[v] = ;
if(path[v] == - || dfs(path[v])) {
path[v] = u;
return ;
}
}
}
return ;
} int main()
{
int n, m;
while(cin>>n>>m) {
if(n+m==)
break;
init();
for(int i = ; i<n; i++) {
scanf("%d%d", &a[i].fi, &a[i].se);
}
for(int i = ; i<m; i++) {
scanf("%d%d", &b[i].fi, &b[i].se);
}
for(int i = ; i<n; i++) {
for(int j = ; j<m; j++) {
if(judge(a[i], b[j])) {
add(i, j+n);
}
}
}
int ans = ;
mem1(path);
for(int i = ; i<n; i++) {
mem(vis);
ans += dfs(i);
}
cout<<n+m-ans<<endl;
}
return ;
}
hdu 4619 Warm up 2 二分图匹配的更多相关文章
- hdu 4619 Warm up 2 ( 二分图最大匹配 )
		
题目:Warm up 2 题意:有横竖两种方式放着的多米诺骨牌,相同方向的不可能重叠,但是横放和竖放 的牌可能重叠.移走重叠的牌使剩下的牌最多. 分析:二分图匹配:最大独立集= ...
 - hdu 4619 Warm up 2 (二分匹配)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4619 题意: 平面上有一些1×2的骨牌,每张骨牌要么水平放置,要么竖直放置,并且保证同方向放置的骨牌不 ...
 - HDU 4619 Warm up 2 贪心或者二分图匹配
		
给同一张横着的牌的所在的格子编同一样的号,这些格子对应x集合,给同一张竖着的牌所在的格子编同一样的号,对应y集合,同一个格子上既有横着的牌又有竖着的牌,那么就建一条边,有冲突就要拿走一张,结果是总的牌 ...
 - hdu 4619 Warm up 2(并查集)
		
借用题解上的话,就是乱搞题.. 题意理解错了,其实是坐标系画错了,人家个坐标系,我给当矩阵画,真好反了.对于题目描述和数据不符的问题,果断相信数据了(这是有前车之鉴的hdu 4612 Warm up, ...
 - hdu 3829 Cat VS Dog 二分图匹配 最大点独立集
		
Cat VS Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Prob ...
 - HDU 4619 Warm up 2(2013多校2  1009  二分匹配)
		
Warm up 2 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total S ...
 - HDU 多校联合练习赛2 Warm up 2 二分图匹配
		
Warm up 2 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
 - HDU 4685 Prince and Princess 二分图匹配+tarjan
		
Prince and Princess 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4685 Description There are n pri ...
 - HDU 4619 Warm up 2 最大独立集
		
Warm up 2 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4619 Description Some 1×2 dominoes are pla ...
 
随机推荐
- javascript数组排序-----1
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 【Winform开发2048小游戏】
			
先来看一下界面: 游戏帮助类 class GameCore { //游戏地图 private int[,] map = new int[4, 4]; //合并时用到的临时数组 private int[ ...
 - BootStrap 模态框禁用空白处点击关闭问题
			
模态框为信息编辑窗口,涉及好多内容,填了半天,若一不小心点了空白处,那就前功尽弃了..... 所以我们很有必要禁用鼠标点击空白处模态框关闭的功能. $('#myModal').modal({backd ...
 - android入门——UI(1)
			
一.使用TextView ImageView Button EditView做出登录页面 <?xml version="1.0" encoding="utf-8&q ...
 - [工具] XMind
			
XMind是一款非常实用的思维导图软件, 高效易用的可视化思维软件; 通过XMind可以随时开展头脑风暴, 帮助人们快速理清思路, XMind可绘制的思维导图, 鱼骨图, 二维图, 树形图, 逻辑图, ...
 - [C#参考]利用Socket连续发送数据
			
这个例子只是一个简单的连续发送数据,接收数据的DEMO.因为最近做一个项目,要求robot连续的通过Socket传回自己的当前的位置坐标,然后客户端接收到坐标信息,在本地绘制地图,实时显示robot的 ...
 - easyui给select控件绑定change事件
			
一般的做法是使用jQuery来绑定,例如: $("#id").change(function(){ alert("change事件绑定"); }); 当给sel ...
 - h5的api dom全屏展示
			
下面是完整的例子,暂不做分析 <!DOCTYPE html> <html> <head> <title> FullScreen API 演示</t ...
 - codeforces 632F. Magic Matrix
			
题目链接 给一个n*n的矩阵, 问是否对角线上的元素全都为0, a[i][j]是否等于a[j][i], a[i][j]是否小于等于max(a[i][k], a[j][k]), k为任意值. 前两个都好 ...
 - [LeetCode]题解(python):144-Binary Tree Preorder Traversal
			
题目来源: https://leetcode.com/problems/binary-tree-preorder-traversal/ 题意分析: 前序遍历一棵树,递归的方法很简单.那么非递归的方法呢 ...