tjut 4619
2016-07-27 16:37
323 查看
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<vector> using namespace std; //************************************************ const int MAXN=2505;//这个值要超过两边个数的较大者,因为有linker int linker[MAXN]; bool used[MAXN]; vector<int>map[MAXN]; int uN; bool dfs(int u) { for(int i=0;i<map[u].size();i++) { if(!used[map[u][i]]) { used[map[u][i]]=true; if(linker[map[u][i]]==-1||dfs(linker[map[u][i]])) { linker[map[u][i]]=u; return true; } } } return false; } int hungary() { int u; int res=0; memset(linker,-1,sizeof(linker)); for(u=0;u<uN;u++) { memset(used,false,sizeof(used)); if(dfs(u)) res++; } return res; } pair<int,int>p1[MAXN]; pair<int,int>p2[MAXN]; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n,m; int x,y; while(scanf("%d%d",&n,&m)==2) { if(n==0 &&m==0)break; for(int i = 0;i < n;i++) { scanf("%d%d",&x,&y); p1[i]= make_pair(x,y); } for(int i = 0;i < m;i++) { scanf("%d%d",&x,&y); p2[i]= make_pair(x,y); } uN = n; for(int i = 0;i < n;i++) map[i].clear(); for(int i = 0;i < n;i++) { for(int j = 0;j < m;j++) { int x1 = p1[i].first; int y1 = p1[i].second; int x2 = p2[j].first; int y2 = p2[j].second; if( (x1==x2 && y1==y2) ||(x1==x2 && y1==y2+1) ||(x1+1==x2 && y1==y2) ||(x1+1==x2 && y1==y2+1) ) map[i].push_back(j); } } int ans = n+m-hungary(); printf("%d\n",ans); } return 0; }
相关文章推荐
- Android Notification
- Openstack Restful API 开发框架 Paste + PasteDeploy + Routes + WebOb
- 菱形实现气泡Bubble,菱形画箭头,菱形画三角形
- 读书笔记:JavaScript编程全解
- log4j:ERROR Category option " 1 " not a decimal integer.错误解决
- 制作uboot
- Activi工作流与业务关联详解
- android固件集成
- 第一个JDBC任务
- android中 ionic tabs 位置更改
- excel文件导出
- HDU5727
- Codeforces Round #244 (Div. 2) E. Police Patrol(数学)
- Android梳理不常用widget篇
- js 生成二维码实例
- mysql -- 区分apk包中,java包,android包,第三方包的方法
- 实体引用
- 【转载】十条jQuery代码片段助力Web开发效率提升
- 看慕课节日祝福总结
- UVA 12105 Bigger is Better(数位DP)