hdu2389(HK算法)
题意:t个单位时间后开始下雨,给你N个访客的位置(一维坐标平面内)和他的移动速度,再给M个雨伞的位置,问在下雨前最多有多少人能够拿到雨伞(两个人不共用一把伞)。
分析:这题匈牙利算法撸不过,只好去学习Hopcroft-Carp算法,复杂度为O(sqrt(V)*E),该算法预先找好增广路径集,避免了许多没不要的匹配.
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-6
#define N 10010
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
int dx[N],dy[N],matchx[N],matchy[N];
int vis[N],dis,n,m,t;
vector<int>g[N];
struct node
{
int x,y,z;
}s[N];
bool search_path()
{
queue<int>que;
dis=inf;
FILL(dx,-);FILL(dy,-);
for(int i=;i<=n;i++)
{
if(matchx[i]==-)
{
que.push(i);
dx[i]=;
}
}
while(!que.empty())
{
int u=que.front();
que.pop();
if(dx[u]>dis)break;
for(int i=,sz=g[u].size();i<sz;i++)
{
int v=g[u][i];
if(dy[v]==-)
{
dy[v]=dx[u]+;
if(matchy[v]==-)dis=dy[v];
else
{
dx[matchy[v]]=dy[v]+;
que.push(matchy[v]);
}
}
}
}
return dis!=inf;
}
int dfs(int u)
{
for(int i=,sz=g[u].size();i<sz;i++)
{
int v=g[u][i];
if(!vis[v]&&dy[v]==dx[u]+)
{
vis[v]=;
if(matchy[v]!=-&&dy[v]==dis)continue;
if(matchy[v]==-||dfs(matchy[v]))
{
matchy[v]=u;
matchx[u]=v;
return ;
}
}
}
return ;
}
int HK()
{
int res=;
FILL(matchx,-);FILL(matchy,-);
while(search_path())
{
FILL(vis,);
for(int i=;i<=n;i++)
if(matchx[i]==-&&dfs(i))res++;
}
return res;
}
bool judge(int a,int b,int x,int y,int z)
{
return (a-x)*(a-x)+(b-y)*(b-y)<=(z*t)*(z*t);
}
int main()
{
int T,cas=;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&t,&n);
for(int i=;i<=n;i++)g[i].clear();
for(int i=;i<=n;i++)
scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].z);
scanf("%d",&m);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
for(int j=;j<=n;j++)
{
if(judge(x,y,s[j].x,s[j].y,s[j].z))
g[j].push_back(i);
}
}
int ans=HK();
printf("Scenario #%d:\n%d\n",cas++,ans);
puts("");
}
}
hdu2389(HK算法)的更多相关文章
- HDU2389 Rain on your Parade —— 二分图最大匹配 HK算法
题目链接:https://vjudge.net/problem/HDU-2389 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) ...
- 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 ...
- 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 ...
- HDU2389:Rain on your Parade(二分图最大匹配+HK算法)
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
- LightOJ 1356 Prime Independence 二分图最大独立集,HK算法
这个题唯一需要说的就是普通的匈牙利算法是O(nm)的,过不了 然后HK算法可以O(n^0.5m),这个算法可以每次找很多同样长度的最短增广路 分析见:http://www.hardbird.net/l ...
- HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】
<题目链接> 题目大意:有m个宾客,n把雨伞,预计时间t后将会下大雨,告诉你每个宾客的位置和速度,每把雨伞的位置,问你最多几个宾客能够拿到伞. 解题分析: 本题就是要我们求人与伞之间的最大 ...
- hdu 2389(二分图hk算法模板)
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
- POJ1469 COURSES 【二分图最大匹配·HK算法】
COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17777 Accepted: 7007 Descript ...
- 【机器学习】HK算法(LMSE算法) LMS算法改进保证线性可分时均方误差标准能够找到线性可分的超平面
1.其实HK算法思想很朴实,就是在最小均方误差准则下求得权矢量. 他相对于感知器算法的优点在于,他适用于线性可分和非线性可分得情况,对于线性可分的情况,给出最优权矢量,对于非线性可分得情况,能够判别出 ...
随机推荐
- wxWidgets帮助文档(1)
IMPLEMENT_APP IMPLEMENT_APP(className) 这是在应用程序中使用类的实现文件的应用程序类wxWidgets动态建筑.你用这个代替Old form: MyApp myA ...
- 事务管理在三层架构中应用以及使用ThreadLocal再次重构
本篇将详细讲解如何正确地在实际开发中编写事务处理操作,以及在事务处理的过程中使用ThreadLocal的方法. 在前面两篇博客中已经详细地介绍和学习了DbUtils这个Apache的工具类,那么在本篇 ...
- QString ini ;转义符
ini如果value字符串中存在:,通过双引号即可转义 [a] b=sdc";"gf
- PHP学习之-1.2 认识PHP脚本标识
想在代码中实现PHP代码非常简单,如下面代码 <?php echo "和我一起学习php吧"; ?> 就像你在编写javascript脚本中需要写<script& ...
- perl EXPORT模块
Exporter - Implements default import method for modules 实现模块的默认导出方法: 简介: [tomcat@wx03 ~]$ cat hui.pm ...
- 浅谈MySQL 数据库性能优化
MySQL数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理工作.本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存 ...
- 菜鸟从零学编程(七)——搭建一个完整的Java开发环境
作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,eclipse(或者myeclipse ...
- Swift - 点击输入框外部屏幕关闭虚拟键盘
我们如果把文本框的Return Key设置成Done,然后在storyboard中将文本框的Did End On Exit事件在代码里进行关联.同时关联代码里调用文本框的resignFirstResp ...
- matlab画棋盘格程序
转载请注明出处:zhouyelihua**http://blog.csdn.net/zhouyelihua/article/details/46674191** 意义 在摄像机标定过程中经常须要打印棋 ...
- Mac OS升级到Yosemite后一些问题
苹果"优山美地"採用移动设备平面风格,看起来还是相当清爽. 只是升级完还是有一些程序兼容性问题的. 1. 开发Android的程序猿们,Java se 6 须要升级到2014_00 ...