传送门:Rain on your Parade

题意: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算法)的更多相关文章

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

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

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

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

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

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

  5. LightOJ 1356 Prime Independence 二分图最大独立集,HK算法

    这个题唯一需要说的就是普通的匈牙利算法是O(nm)的,过不了 然后HK算法可以O(n^0.5m),这个算法可以每次找很多同样长度的最短增广路 分析见:http://www.hardbird.net/l ...

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

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

  7. hdu 2389(二分图hk算法模板)

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

  8. POJ1469 COURSES 【二分图最大匹配&#183;HK算法】

    COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17777   Accepted: 7007 Descript ...

  9. 【机器学习】HK算法(LMSE算法) LMS算法改进保证线性可分时均方误差标准能够找到线性可分的超平面

    1.其实HK算法思想很朴实,就是在最小均方误差准则下求得权矢量. 他相对于感知器算法的优点在于,他适用于线性可分和非线性可分得情况,对于线性可分的情况,给出最优权矢量,对于非线性可分得情况,能够判别出 ...

随机推荐

  1. Ember.js - About

    Ember.js - About More Productive Out of the Box.   Write dramatically less code with Ember's Handleb ...

  2. Redis bio

    还是一个很小的模块. bio就是background io的意思,既然要background,就要创建线程,创建几个线程呢?有几种类型的io,就创建几个线程.同一种类型的job需要排队,所以存放各自的 ...

  3. POI读入excel文件到Java中

    package Poi_Test; //导入java自带的包 import java.io.BufferedInputStream; import java.io.File; import java. ...

  4. MinGW 介绍

    SDL新手教程(一):3.MinGW 下的安装与设置 作者:龙飞 3.1:MinGW 是什么? MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境.MinGW 收集了一系列免费 ...

  5. [Cocos2d-x开发问题-3] cocos2dx动画Animation介绍

    Cocos2d-x为了减少开发难度,对于动画的实现採用的帧动画的方案.这也就是说Cocos2d-x中的动画是帧动画. 帧动画的原理相信大家都不陌生,就是多张图片循环播放以实现动画的效果. 一个简单的动 ...

  6. node-inspector使用

    nodejs.gulp调试工具node-inspector使用 俗话说欲善其功,必先利其器. 作为目前新型的Web Server开发栈倍受开发者关注的Nodejs来说,调试技术是学习开发的基石,所以对 ...

  7. Taxonomy of class loader problems encountered when using Jakarta Commons Logging(转)

    Acknowledgments I would like to thank Jacob Kjome for reviewing early drafts of this document. His c ...

  8. ANT编译Android Eclipse工程

    将Android SDK的tools/和platform-tools/目录包含在可执行文件的搜索路径中.Windows下,将其添加到PATH环境变量中 切换到Android Eclipse项目目录下, ...

  9. hdu 4687 Boke and Tsukkomi

    Dancing link twice. Find the maximum combination numbers in the first time. Enumerate each node, dan ...

  10. Lucene.Net 2.3.1开发介绍 —— 四、搜索(三)

    原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(三) Lucene有表达式就有运算符,而运算符使用起来确实很方便,但另外一个问题来了. 代码 4.3.4.1 Analyzer anal ...