裸二分图匹配

  1. /*--------------------------------------------------------------------------------------*/
  2.  
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <cstring>
  6. #include <ctype.h>
  7. #include <cstdlib>
  8. #include <cstdio>
  9. #include <vector>
  10. #include <string>
  11. #include <queue>
  12. #include <stack>
  13. #include <cmath>
  14. #include <set>
  15. #include <map>
  16.  
  17. //debug function for a N*M array
  18. #define debug_map(N,M,G) printf("\n");for(int i=0;i<(N);i++)\
  19. {for(int j=;j<(M);j++){\
  20. printf("%d",G[i][j]);}printf("\n");}
  21. //debug function for int,float,double,etc.
  22. #define debug_var(X) cout<<#X"="<<X<<endl;
  23. #define LL long long
  24. const int INF = 0x3f3f3f3f;
  25. const LL LLINF = 0x3f3f3f3f3f3f3f3f;
  26. /*--------------------------------------------------------------------------------------*/
  27. using namespace std;
  28.  
  29. int N,M,T,t;
  30. const int maxn = ;
  31. vector <int> G[maxn];
  32. int uN;
  33. int Mx[maxn],My[maxn];
  34. int dx[maxn],dy[maxn];
  35. int dis;
  36. bool used[maxn];
  37. bool SearchP()
  38. {
  39. queue<int> Q;
  40. dis = INF;
  41. memset(dx,-,sizeof dx);
  42. memset(dy,-,sizeof dy);
  43. for(int i=;i<=uN;i++)
  44. {
  45. if(Mx[i] == -)
  46. {
  47. Q.push(i);
  48. dx[i] = ;
  49. }
  50. }
  51. while(!Q.empty())
  52. {
  53. int u = Q.front();
  54. Q.pop();
  55. if(dx[u] > dis) break;
  56. int sz = G[u].size();
  57. for(int i=;i<sz;i++)
  58. {
  59. int v = G[u][i];
  60. if(dy[v] == -)
  61. {
  62. dy[v] = dx[u] + ;
  63. if(My[v] == -) dis = dy[v];
  64. else
  65. {
  66. dx[My[v]] = dy[v] + ;
  67. Q.push(My[v]);
  68. }
  69. }
  70. }
  71. }
  72. return dis != INF;
  73. }
  74. bool DFS(int u)
  75. {
  76. int sz = G[u].size();
  77. for(int i=;i<sz;i++)
  78. {
  79. int v = G[u][i];
  80. if(!used[v] && dy[v] == dx[u]+)
  81. {
  82. used[v] = true;
  83. if(My[v] != - && dy[v] == dis) continue;
  84. if(My[v] == - || DFS(My[v]))
  85. {
  86. My[v] = u;
  87. Mx[u] = v;
  88. return true;
  89. }
  90. }
  91. }
  92. return false;
  93. }
  94.  
  95. int MaxMatch()
  96. {
  97. int res = ;
  98. memset(Mx,-,sizeof Mx);
  99. memset(My,-,sizeof My);
  100. while(SearchP())
  101. {
  102. memset(used,false,sizeof used);
  103. for(int i=;i<=uN;i++) if(Mx[i] == - && DFS(i))
  104. res++;
  105. }
  106. return res/;
  107. }
  108.  
  109. typedef pair<int,int> point;
  110. vector <point> gst;
  111. int v[maxn];
  112.  
  113. int main()
  114. {
  115. scanf("%d",&T);
  116. int cas = ;
  117. while(T--)
  118. {
  119. scanf("%d%d",&t,&N);
  120. for(int i=;i<maxn;i++) G[i].clear();
  121.  
  122. gst.clear();
  123. for(int i=,x,y,s;i<=N;i++)
  124. {
  125. scanf("%d%d%d",&x,&y,&s);
  126. gst.push_back(make_pair(x,y));
  127. v[i] = s;
  128. }
  129. scanf("%d",&M);
  130. uN = N+M;
  131. for(int i=,x,y;i<=M;i++)
  132. {
  133. scanf("%d%d",&x,&y);
  134. for(int g=;g<gst.size();g++)
  135. {
  136. if((x-gst[g].first)*(x-gst[g].first)+(y-gst[g].second)*(y-gst[g].second) <= t*v[g+]*t*v[g+])
  137. {
  138. G[g+].push_back(i+N);
  139. G[i+N].push_back(g+);
  140. //printf("link:[%d,%d]\n",g+1,i+N);
  141. }
  142. }
  143. }
  144. printf("Scenario #%d:\n%d\n\n",++cas,MaxMatch());
  145. }
  146. }

HDU2389-Rain on your Parade-二分图匹配-ISAP的更多相关文章

  1. hdu2389 Rain on your Parade 二分图匹配--HK算法

    You’re giving a party in the garden of your villa by the sea. The party is a huge success, and every ...

  2. HDU2389 Rain on your Parade —— 二分图最大匹配 HK算法

    题目链接:https://vjudge.net/problem/HDU-2389 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)  ...

  3. hdu-2389.rain on your parade(二分匹配HK算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

  4. Hdu 3289 Rain on your Parade (二分图匹配 Hopcroft-Karp)

    题目链接: Hdu 3289 Rain on your Parade 题目描述: 有n个客人,m把雨伞,在t秒之后将会下雨,给出每个客人的坐标和每秒行走的距离,以及雨伞的位置,问t秒后最多有几个客人可 ...

  5. Hdu2389 Rain on your Parade (HK二分图最大匹配)

    Rain on your Parade Problem Description You’re giving a party in the garden of your villa by the sea ...

  6. BZOJ.3546.[ONTAK2010]Life of the Party(二分图匹配 ISAP)

    题目链接 题意:求哪些点一定在最大匹配中. 这儿写过,再写一遍吧. 求哪些点不一定在最大匹配中.首先求一遍最大匹配,未匹配点当然不一定在最大匹配中. 设一个未匹配点为A,如果存在边A-B,且存在匹配边 ...

  7. HDU2389:Rain on your Parade(二分图最大匹配+HK算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

  8. HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配)

    HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配) Description You're giving a ...

  9. HDU 2389 Rain on your Parade(二分匹配,Hopcroft-Carp算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

  10. HDU2389(二分图匹配Hopcroft-Carp算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

随机推荐

  1. C#编写抽奖问题

    输入每个人的中奖号码,进行滚动显示    //清屏  //随即一个索引   // 根据索引打印  //等待0.1秒            Console.Write("请输入参与者人数:&q ...

  2. SQL 笔记

    --查询某一列在哪个表里 SELECT name , object_id , type , type_desc FROM sys.objects WHERE object_id IN ( SELECT ...

  3. InnoDB源码分析--缓冲池(三)

    转载请附原文链接:http://www.cnblogs.com/wingsless/p/5582063.html 昨天写到了InnoDB缓冲池的预读:<InnoDB源码分析--缓冲池(二)> ...

  4. cocosstdio之字体之文本和FNT字体

    FNT字体和文本字体的作用是:导入字体资源可以使用字体资源便可以使用其资源内的字体来在程序中使用 不同的是FNT字体资源内容比较少,所以个人猜想可以在特定情况下使用: 两种字体资源对比: 赋值过程对比 ...

  5. linux enc28j60网卡驱动移植(硬件spi和模拟spi)

    本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因...刚好手上有一个enc28j60的网卡模块,于是 ...

  6. /etc/fstab 参数详解及如何设置开机自动挂载

    某些时候当Linux系统下划分了新的分区后,需要将这些分区设置为开机自动挂载,否则,Linux是无法使用新建的分区的. /etc/fstab 文件负责配置Linux开机时自动挂载的分区. Window ...

  7. discuz mysqli_connect() 不支持 advice_mysqli_connect

      看网友的解决方案是:下面2行去掉注释 ? 1 2 ;extension=php_mysql.dll ;extension=php_mysqli.dl 尝试修改 ? 1 #vi /etc/php.i ...

  8. 关于TD-LTE网络MRO分析中的一些疑问

    1.eNB天线到达角(LteScAOA)超出正常值范围 在OMC-R测量报告技术要求中此字段的定义为: "定义了一个用户相对参考方向的估计角度.测量参考方向应为正北,逆时针方向.可以辅助确定 ...

  9. Carcraft

    魔兽登录系统   创建魔兽系统相关窗体: 登录窗体(frmLogin) 注册窗体(frmRegister) 主窗体   (frmMain) 实现魔兽登录系统: 登录的界面如下 实现思路: 1.创建一个 ...

  10. [No000024]鲜为人知的编程真相

    当程序员的经历让我知道了一些关于软件编程的事情.下面的这些事情可能会让朋友们对软件开发感到惊讶: 一个程序员用在写程序上的时间大概占他的工作时间的10-20% ,大部分的程序员每天大约能写出10-12 ...