题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2389

思路:纯裸的一个最大匹配题,不过悲摧的是以前一直用的dfs版一直过不了,TLE无数次啊,然后改成bfs就过了。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<vector>
  6. #include<cmath>
  7. #include<queue>
  8. using namespace std;
  9. #define MAXN 3333
  10. vector<int>map[MAXN];
  11. int ly[MAXN],lx[MAXN];
  12. int distx[MAXN],disty[MAXN];
  13. int n,m;
  14. struct Node {
  15. int x,y,s;
  16. } p[MAXN];
  17. struct Point {
  18. int x,y;
  19. } q[MAXN];
  20.  
  21. bool bfs()
  22. {
  23. bool flag=false;
  24. memset(distx,,(n+)*sizeof(int));
  25. memset(disty,,(n+)*sizeof(int));
  26. queue<int>Q;
  27. for(int i=; i<=n; i++) {
  28. if(lx[i]==-)Q.push(i);
  29. }
  30. while(!Q.empty()) {
  31. int u=Q.front();
  32. Q.pop();
  33. for(int i=; i<map[u].size(); i++) {
  34. int v=map[u][i];
  35. if(disty[v]==) {
  36. disty[v]=distx[u]+;
  37. if(ly[v]==-)flag=true;
  38. else {
  39. distx[ly[v]]=disty[v]+;
  40. Q.push(ly[v]);
  41. }
  42. }
  43. }
  44. }
  45. return flag;
  46. }
  47.  
  48. int dfs(int u)
  49. {
  50. for(int i=; i<map[u].size(); i++) {
  51. int v=map[u][i];
  52. if(disty[v]==distx[u]+) {
  53. disty[v]=;
  54. if(ly[v]==-||dfs(ly[v])) {
  55. ly[v]=u;
  56. lx[u]=v;
  57. return ;
  58. }
  59. }
  60. }
  61. return ;
  62. }
  63.  
  64. int MaxMatch()
  65. {
  66. int res=;
  67. memset(lx,-,(n+)*sizeof(lx[]));
  68. memset(ly,-,(n+)*sizeof(ly[]));
  69. while(bfs()) {
  70. for(int i=; i<=n; i++) {
  71. if(lx[i]==-)res+=dfs(i);
  72. }
  73. }
  74. return res;
  75. }
  76.  
  77. int main()
  78. {
  79. // freopen("1.txt","r",stdin);
  80. int _case,time,t=;
  81. scanf("%d",&_case);
  82. while(_case--) {
  83. scanf("%d%d",&time,&n);
  84. for(int i=; i<=n; i++)map[i].clear();
  85. for(int i=; i<=n; i++) {
  86. scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].s);
  87. }
  88. scanf("%d",&m);
  89. for(int i=; i<=m; i++) {
  90. scanf("%d%d",&q[i].x,&q[i].y);
  91. }
  92. for(int i=; i<=n; i++) {
  93. for(int j=; j<=m; j++) {
  94. double xx=(p[i].x-q[j].x)*(p[i].x-q[j].x)*1.0;
  95. double yy=(p[i].y-q[j].y)*(p[i].y-q[j].y)*1.0;
  96. double dd=sqrt(xx+yy);
  97. if(dd<=1.0*time*p[i].s)map[i].push_back(j);
  98. }
  99. }
  100. int ans=MaxMatch();
  101. printf("Scenario #%d:\n%d\n",t++,ans);
  102. puts("");
  103. }
  104. return ;
  105. }

hdu 2389(最大匹配bfs版)的更多相关文章

  1. 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 ...

  2. HDU 2389 ——Rain on your Parade——————【Hopcroft-Karp求最大匹配、sqrt(n)*e复杂度】

    Rain on your Parade Time Limit:3000MS     Memory Limit:165535KB     64bit IO Format:%I64d & %I64 ...

  3. HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】

    <题目链接> 题目大意:有m个宾客,n把雨伞,预计时间t后将会下大雨,告诉你每个宾客的位置和速度,每把雨伞的位置,问你最多几个宾客能够拿到伞. 解题分析: 本题就是要我们求人与伞之间的最大 ...

  4. HDU 4607.Park Visit-树的直径(BFS版)+结论公式(乱推公式)-备忘(加油!)

    Park Visit Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. (匹配 Hopcroft-Karp算法)Rain on your Parade -- Hdu --2389

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2389 不能用匈牙利,会TEL的,用Hopcroft-Karp Hopcroft-Karp课件 以前是寻找 ...

  6. HDU 2853 最大匹配&KM模板

    http://acm.hdu.edu.cn/showproblem.php?pid=2853 这道题初看了没有思路,一直想的用网络流如何解决 参考了潘大神牌题解才懂的 最大匹配问题KM 还需要一些技巧 ...

  7. HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4528 小明系列故事——捉迷藏 Time Limit: 500/200 MS (Java/O ...

  8. hdu 1072 Nightmare (bfs+优先队列)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1072 Description Ignatius had a nightmare last night. H ...

  9. HDU 3533 Escape bfs 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=3533 一道普通的bfs,但是由于代码实现出了bug还是拖了很久甚至对拍了 需要注意的是: 1.人不能经过炮台 2 ...

随机推荐

  1. JSON对象和String之间的互转及处理

    如题,本文列举了一些在web前端开发中常用的转换及处理方式.使用JSON而不是字符串,主要是为了方便处理. JSON:JavaScript 对象表示法(JavaScript Object Notati ...

  2. linux 简单的DMA例程

    一个简单的使用DMA 例子 示例:下面是一个简单的使用DMA进行传输的驱动程序,它是一个假想的设备,只列出DMA相关的部分来说明驱动程序中如何使用DMA的. 函数dad_transfer是设置DMA对 ...

  3. [无人值守安装操作系统]__RHEL6__FTP+TFTP+DHCP+Kickstart+PXE

    实验环境 1.实验平台:VMware Workstation 10 2.实验OS:RHEL6 3.服务器A: (1) 10.0.10.158 (2) DHCP/FTP/TFTP (3) 有可使用的yu ...

  4. Indigo Studio

    http://www.infragistics.com/products/indigo-studio?gclid=CIXrnav4lcQCFdclvQoduVEAnA

  5. Teamwork-Week2真对必应词典和有道词典的软件分析和用户需求调查(桌面版)

    经调查,现在有道词典在该领域拥有很大程度的市场占有率,所以我们将有道词典与必应词典进行对比. 核心功能一:单词本 有道词典中的单词本都只能是由用户手动添加不会的单词,而必应词典中的单词 不仅可以被自己 ...

  6. 软件工程随堂小作业——寻找“水桶”(C++)

    一.设计思想 思路与寻找一个水王相似,这次只是计数器和嫌疑人变量都设置为数组.每次选取一个ID与三个嫌疑人比较,若有相同则计数:若三个都不相同,则三个计数器都减一.若减为0,则从新赋值给嫌疑人. 二. ...

  7. WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付

    痛点: 我们用WordPress建设网站和开发移动应用,有时候我们其实不需要太多的流程,只是需要一个收款通道,但是可能对支持的渠道更加关注,特别是手机应用.所以WordPress按钮秒支付插件诞生了, ...

  8. 工作点滴积累(1)---MD5和编码

    今天同事忽然问了一个问题,他发现同一个字符,比如"电影",用项目中的md5工具类生成的hash值和网上提供的在线MD5生成的hash值有时不一样,在只包含了字母字符串中,生成的ha ...

  9. ZeroMQ 在 centos 6.5_x86_64 下的安装

    ZeroMQ 在 centos 6.5_x86_64 下的安装 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.ZeroMQ介绍 ZeroMQ是一个开 ...

  10. zoj 2760 How Many Shortest Path 最大流

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1760 Given a weighted directed graph ...