http://acm.hdu.edu.cn/showproblem.php?pid=2389

经典求最大匹配题,数据范围过大,匈牙利算法超时

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
/* ******************************** 二分图匹配(Hopcroft-Carp算法)* 复杂度O(sqrt(n)*E)* 邻接表存图,vector实现* vector先初始化,然后假如边* uN 为左端的顶点数,使用前赋值(点编号0开始)*/
const int MAXN = 3030;
const int INF = 0x3f3f3f3f;
vector<int>G[MAXN];
int uN;int Mx[MAXN],My[MAXN];
int dx[MAXN],dy[MAXN];
int dis;
bool used[MAXN];
bool SearchP()
{queue<int>Q;dis = INF;memset(dx,-1,sizeof(dx));memset(dy,-1,sizeof(dy));for(int i = 0 ; i < uN; i++)if(Mx[i] == -1){Q.push(i);dx[i] = 0;}while(!Q.empty()){int u = Q.front();Q.pop();if(dx[u] > dis)break;int sz = G[u].size();for(int i = 0;i < sz;i++){int v = G[u][i];if(dy[v] == -1){dy[v] = dx[u] + 1;if(My[v] == -1)dis = dy[v];else{dx[My[v]] = dy[v] + 1;Q.push(My[v]);}}}}return dis != INF;
}
bool DFS(int u)
{int sz = G[u].size();for(int i = 0;i < sz;i++){int v = G[u][i];if(!used[v] && dy[v] == dx[u] + 1){used[v] = true;if(My[v] != -1 && dy[v] == dis)continue;if(My[v] == -1 || DFS(My[v])){My[v] = u;Mx[u] = v;return true;}}}return false;
}
int MaxMatch()
{int res = 0;memset(Mx,-1,sizeof(Mx));memset(My,-1,sizeof(My));while(SearchP()){memset(used,false,sizeof(used));for(int i = 0;i < uN;i++)if(Mx[i] == -1 && DFS(i))res++;}return res;
}struct Point
{int x,y,s;void input1(){scanf("%d%d%d",&x,&y,&s);}void input2(){scanf("%d%d",&x,&y);}
};
int dis2(Point a,Point b)
{return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
Point p1[MAXN],p2[MAXN];int main()
{int T;int t;int iCase = 0;int n,m;scanf("%d",&T);while(T--){iCase++;scanf("%d",&t);scanf("%d",&n);for(int i = 0;i < n;i++)p1[i].input1();scanf("%d",&m);for(int i = 0;i < m;i++)p2[i].input2();for(int i = 0;i < n;i++)G[i].clear();uN = n;for(int i = 0;i < n;i++)for(int j = 0;j < m;j++)if(dis2(p1[i],p2[j]) <= p1[i].s*p1[i].s*t*t)G[i].push_back(j);printf("Scenario #%d:\n",iCase);printf("%d\n\n",MaxMatch());}return 0;
}

(Hopcroft-Carp二分图匹配)Rain on your Parade相关推荐

  1. Rain on your Parade(二分图匹配-Hopcroft-Carp算法)

    (代码里有很多注释) 匈牙利算法的复杂度是O(n*e),那么如果对于一个点和边比较多的图,匈牙利算法很容易超时,采用Hopcroft-Carp算法能够在 O(sqrt(n)*e)的复杂度内实现二分图匹 ...

  2. HDU 2389 Rain on your Parade (二分图匹配)

    题意:天马上就要下雨了,然后有n个人,m把伞,然后分别给出人的坐标和他们跑的速度,以及伞的坐标,然后问在t时间内,最多能有多少人拿到伞. 题解:二分图匹配 之前做过一道类似的题目,是用最大流做的,但这 ...

  3. 二分图匹配 Hopcroft-Carp (HK) 算法详解 附例题

    了解这个算法之前 首先了解一个概念 :增广路 增广路 :简单的说 ,是二分图匹配中的一条边,他总是从 左边集合的一个点出发通过一条没有被匹配的边连接到右边集合,再从该点通过一条 匹配过的边连接到右边集 ...

  4. HDUOJ 2389 Rain on your Parade

    HDUOJ 2389 Rain on your Parade 题目链接 Problem Description You're giving a party in the garden of your ...

  5. HDU——hdu2389 Rain on your Parade

    hdu2389 Rain on your Parade 题解 1.构二分图. 2.匈牙利算法超时(O(VE)) 3.用Hopcroft-Carp算法(O(sqrt(V)E)) 算法讲解 算法模板 AC ...

  6. Dinic二分图匹配 || Luogu P3386

    题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...

  7. 二分图匹配匈牙利算法DFS实现

    1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...

  8. poj1274(二分图匹配)

    (一道基础的二分图匹配) 题目意思大概为N个牛和M个栅栏,一个牛和一个栅栏只能匹配一次,求最大匹配 直接套用二分图最大匹配模板即可 #include <iostream> #include ...

  9. poj2724(二分图匹配)

    题目大概意思为有部分奶酪需要处理,若两个奶酪的二进制只有一位不同,则可以一起处理,问最少需要处理几次 题目思路: 将可以一起处理的两个奶酪用边连接在一起,相当于边只连接二进制中有偶数个1的奶酪和二进制 ...

最新文章

  1. ActionBar通过Tab进行不同的Fragment之间的交换
  2. CommandBehavior.CloseConnection有何作用
  3. Spring Boot 配置文件中的花样,看这一篇足矣!
  4. django的ajax_get请求
  5. CSS 字体(font)实例
  6. vivado 启动过程中报错
  7. 机器字长 存储字长 指令字长 机器字长
  8. android GPS
  9. GD32VF103启动流程分析
  10. 【转】中华吸血鬼分析
  11. 华为员工:表面光鲜 工作十年买不起房
  12. 三维匹配_多视图几何三维重建实战系列之COLMAP
  13. 利用R语言进行主成分分析的步骤
  14. IDEA Error occurred during initialization of VM
  15. 高红梅:第三章 第二节 身份焦虑与英雄梦
  16. openstack环境搭建之六horizon配置
  17. 【七】【vlc-android】vlc的decoder控制层传输数据与ffmpeg音频解码模块decoder层进行解码的数据交互流程源码分析
  18. 底层嵌入式之NOR FLASH编程
  19. 《黑镜》(Black Mirror)
  20. 341-Linux 连接数据库

热门文章

  1. 关键字 surper 和 this
  2. 基于IPFS视频存储的在线视频网站
  3. 计算机uc,UC浏览器
  4. 系统安装 使用VMware15安装Win7系统
  5. 中铁汇达保险经纪保单计算个人理解
  6. webstorm2020背景和字体_怎么为WebStorm更换主题 修改字体样式
  7. 流量不清零:用户开心,运营商无奈
  8. Handler sync barrier(同步屏障)
  9. https证书过期时间应该怎么处理
  10. TX2(Ubuntu16.04)安装TP-link外接网卡驱动及AP热点创建