1. /*
  2. 匈牙利算法
  3. 二分匹配 最小点覆盖=最大匹配。
  4. 即踢掉最小点覆盖
  5. */
  6. #include<stdio.h>
  7. #include<string.h>
  8. #include<stdlib.h>
  9. #include<algorithm>
  10. #include<iostream>
  11. #include<queue>
  12. #include<map>
  13. #include<math.h>
  14. using namespace std;
  15. typedef long long ll;
  16. //typedef __int64 int64;
  17. const int maxn = 1015;
  18. const int inf = 0x7fffffff;
  19. const double pi=acos(-1.0);
  20. const double eps = 1e-8;
  21. struct Edge{
  22. int v,next;
  23. }edge[ maxn<<4 ];
  24. struct Node{
  25. int x,y;
  26. }sum[ maxn<<1 ];
  27. int cnt,head[ maxn<<1 ];
  28. int vis[ maxn<<1 ],mylink[ maxn<<1 ];
  29. void init(){
  30. cnt = 0;
  31. memset( head,-1,sizeof( head ) );
  32. }
  33. void addedge( int a,int b ){
  34. edge[ cnt ].v = b;
  35. edge[ cnt ].next = head[ a ];
  36. head[ a ] = cnt++;
  37. }
  38. bool km( int u ){
  39. for( int i=head[ u ];i!=-1;i=edge[ i ].next ){
  40. int v = edge[ i ].v;
  41. if( vis[ v ]==0 ){
  42. vis[ v ] = 1;
  43. if( mylink[ v ]==-1||km( mylink[v] ) ){
  44. mylink[ v ] = u;
  45. return true;
  46. }
  47. }
  48. }
  49. return false;
  50. }
  51. int solve( int n,int m ){
  52. memset( mylink,-1,sizeof( mylink ) );
  53. int ans = 0;
  54. for( int i=1;i<=n;i++ ){
  55. memset( vis,0,sizeof( vis ) );
  56. if( km(i) )
  57. ans++;
  58. }
  59. return ans;
  60. }
  61. bool Judge( int i,int j ){
  62. int x1 = sum[i].x;
  63. int y1 = sum[i].y;
  64. int x2 = sum[j].x;
  65. int y2 = sum[j].y;
  66. if( x1==x2 ){
  67. if( y1==y2 ) return true;
  68. if( y1==y2+1 ) return true;
  69. }
  70. if( x1+1==x2 ){
  71. if( y1==y2 ) return true;
  72. if( y1==y2+1 ) return true;
  73. }
  74. return false;
  75. }
  76.  
  77. int main(){
  78. int n,m;
  79. while( scanf("%d%d",&n,&m)==2,n+m ){
  80. init();
  81. int cc = 1;
  82. for( int i=1;i<=n;i++ )
  83. scanf("%d%d",&sum[cc].x,&sum[cc].y),cc++;
  84. for( int j=1;j<=m;j++ )
  85. scanf("%d%d",&sum[cc].x,&sum[cc].y),cc++;
  86. for( int i=1;i<=n;i++ ){
  87. for( int j=n+1;j<cc;j++ ){
  88. if( Judge( i,j ) ){
  89. addedge( i,j );
  90. }
  91. }
  92. }
  93. printf("%d\n",cc-1-solve( n,m ));
  94. }
  95. return 0;
  96. }

HDU4619+匈牙利的更多相关文章

  1. ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)

    //匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...

  2. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  3. 匈牙利算法——S.B.S.

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...

  4. 匈牙利算法与KM算法

    匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...

  5. C++之路进阶codevs1269(匈牙利游戏)

    1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description ...

  6. HDU1054 Strategic Game——匈牙利算法

    Strategic Game Bob enjoys playing computer games, especially strategic games, but sometimes he canno ...

  7. poj1274(匈牙利算法)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22809   Accepted: 101 ...

  8. 匈牙利 算法&模板

    匈牙利 算法 一. 算法简介 匈牙利算法是由匈牙利数学家Edmonds于1965年提出.该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. 二分图的定义: 设G=(V,E)是一个 ...

  9. 匈牙利命名法、骆驼命名法、帕斯卡(pascal)命名法

    (2008-05-24 13:37:55) 转载▼ 标签: 杂谈 分类: 编程杂文 一.匈牙利命名法:         广泛应用于象Microsoft Windows这样的环境中. Windows 编 ...

随机推荐

  1. POJ2222+暴力搜索

    一共2^15个状态 比较简单 /* 2^15 states */ #include<stdio.h> #include<string.h> #include<stdlib ...

  2. ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER003_播放mp3

    一.简介 1.在onListItemClick中实现点击条目时,跳转到PlayerActivity,mp3info通过Intent传给PlayerActivity 2.PlayerActivity通过 ...

  3. QT做界面真是绝美,并且还可嵌入HTML与JS做界面(许多案例)

    1. 这年头想要酷炫, 还是用web最方便, QT自带嵌入式webkit, 然后用d3.js D3.js - Data-Driven Documents什么的, 各种酷炫的互动表随手而来.这里有各种各 ...

  4. 二维图形的矩阵变换(二)——WPF中的矩阵变换基础

    原文:二维图形的矩阵变换(二)--WPF中的矩阵变换基础 在前文二维图形的矩阵变换(一)——基本概念中已经介绍过二维图像矩阵变换的一些基础知识,本文中主要介绍一下如何在WPF中进行矩阵变换. Matr ...

  5. C# ASP.NET FILEUPLOAD详解

    显示一个文本框控件和一个浏览按钮,使用户可以选择要上载到服务器的文件. 命名空间: System.Web.UI.WebControls 程序集: System.Web(在 system.web.dll ...

  6. 【HDOJ】1075 What Are You Talking About

    map,STL搞定. #include <iostream> #include <string> #include <cstdio> #include <cs ...

  7. Oracle EBS R12 WIP Component Issue&Return Process

    oracleassemblytransactionscomponentsjobsreference 目录(?)[-] 定义BOM 定义Routing 定义WIP Discrete Job 发料 Mat ...

  8. 转载:10个实用的但偏执的Java编程技术

    在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 任何事情有可能出错,没错,的确如此. 这就是为什么我们要采用“防御性编程”,即 ...

  9. 转:理解 Linux 的硬链接与软链接

    Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程 创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键 ...

  10. spring的事件机制

    事件机制作为一种编程机制,在许多语言中都提供了支持.JAVA语言也不例外,java中的事件机制的参与者有3种角色: 1.event object 2.event source 3.event list ...