题目链接

题意:有n个客人,m把雨伞,在t秒之后将会下雨,给出每个客人的坐标和每秒行走的距离,以及雨伞的位置,问t秒后最多有几个客人可以拿到雨伞?

就是求最大匹配的

 Hopcroft-Karp复杂度O(sqrt(n)*m),相比匈牙利算法优化在于,Hopcroft-Karp算法每次可以扩展多条不相交增广路径。

所以只能用Hopcroft-Karp而且好像只能用邻接表来表示;

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define N 3010
#define INF 0xfffffff int vis[N], usedx[N], usedy[N], n, m;
int dx[N], dy[N], cnt, depth, head[N];
///BFS分层时,dx[] dy[]记录点所在的层,-1表示不在分层
struct node
{
int x, y, v;
} a[N], b[N];
struct Edge
{
int v, next;
}e[N*N];///用邻接表
void Add(int u, int v)
{
e[cnt].v = v;
e[cnt].next = head[u];
head[u] = cnt++;
} bool Find(int u)
{
for(int i=head[u]; i!=-; i=e[i].next)
{
int v = e[i].v;
if(!vis[v] && dx[u] == dy[v]-)
{
vis[v] = ;
if(!usedy[v] || Find(usedy[v]))
{
usedy[v] = u;
usedx[u] = v;
return true;
}
}
}
return false;
}
bool bfs()
{
queue<int> Q;
depth = INF;
memset(dx, -, sizeof(dx));
memset(dy, -, sizeof(dy));
for(int i=; i<=n; i++)
{
if(!usedx[i])
{
dx[i] = ;
Q.push(i);
}
}
while(!Q.empty())
{
int u = Q.front(); Q.pop();
if(depth < dx[u])
break;
for(int j=head[u]; j!=-; j=e[j].next)
{
int v = e[j].v;
if(dy[v] == -)
{
dy[v] = dx[u] + ;
if(!usedy[v])
depth = dy[v];
else
{
dx[ usedy[v] ] = dy[v] + ;
Q.push( usedy[v] );
}
}
}
}
if(depth == INF)
return false;
return true;
}
int main()
{
int T, t, x, y, t0=;
scanf("%d", &T);
while(T--)
{
cnt = ;
memset(head, -, sizeof(head));
scanf("%d%d", &t, &n);
for(int i=; i<=n; i++)
{
scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].v);
}
scanf("%d", &m);
for(int i=; i<=m; i++)
{
scanf("%d%d", &x, &y);
for(int j=; j<=n; j++)
{
int d = (a[j].x-x)*(a[j].x-x)+(a[j].y-y)*(a[j].y-y);
if(d <= a[j].v*t*a[j].v*t)
Add(j, i);
}
}
int ans = ;
memset(usedx, , sizeof(usedx));
memset(usedy, , sizeof(usedy));
while( bfs() )
{
memset(vis, , sizeof(vis));
for(int i=; i<=n; i++)
{
if(!usedx[i] && Find(i))
ans++;
}
}
printf("Scenario #%d:\n%d\n\n", t0++, ans);
}
return ;
}

Rain on your Parade---hdu2389(HK求最大匹配)的更多相关文章

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

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

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

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

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

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

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

  7. Rain on your Parade

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

  8. HDOJ 2389 Rain on your Parade

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

  9. HDU2389(KB10-F 二分图最大匹配Hopcroft_Karp)

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

随机推荐

  1. Gray Code - 格雷码

    基本概念 格雷码是一种准权码,具有一种反射特性和循环特性的单步自补码,它的循环.单步特性消除了随机取数时出现重大误差的可能,它的反射.自补特性使得求反非常方便.格雷码属于可靠性编码,是一种错误最小化的 ...

  2. postman从入门到精通

    今天总监让我给测试同事们培训postman,使用过postman的朋友应该知道,这个简直就是前后端接口调试神器.根据平时的经验以及自己到网上看了相关的帖子,对于postman又有了新的认识. post ...

  3. JavaSE(八)集合之List

    前面一篇的corejava讲的是集合的概述,这一篇我将详细的和大家讲解一下Collection下面的List.set.queue这三个子接口.希望大家能得到提升. 一.List接口 1.1.List接 ...

  4. Java基础-JDBC访问数据库

    基本步骤: 加载数据库驱动 建立连接 创建SQL语句 执行SQL语句 处理执行结果 释放资源 代码示例: import java.sql.Connection; import java.sql.Dri ...

  5. Android v4包中的 SwipeRefreshLayout 官方的下拉刷新组件

    SwipeRefreshLayout在v4包下,相应的v4Demo中也有相应的样例.假设没有请下载最新support-v4 SwipeRefreshLayout 仅仅能有一个直接子View,可能是一个 ...

  6. 详解MathType中如何批量修改公式字体和大小

    MathType应用在论文中时,有时会因为排版问题批量修改公式字体和大小,一个一个的修改不仅费时费力,还容易出现错误,本教程将详解如何在MathType公式编辑器中批量修改公式字体和大小. MathT ...

  7. 左连接去重(objec)

    需求场景: 1.前端使用的object-table(angularJs) 2.自定义模糊查询 可以模糊查询主表,主表没有数据的时候,可通过字表的(name或者hostname)字段来查询(主-子:一对 ...

  8. easyui------dialog如何固定位置

    转载: http://blog.csdn.net/dhdhdh0920/article/details/7438272 代var default_left; var default_top; $('# ...

  9. day15<集合框架>

    集合框架(对象数组的概述和使用) 集合框架(集合的由来及集合继承体系图) 集合框架(Collection集合的基本功能测试) 集合框架(集合的遍历之集合转数组遍历) 集合框架(Collection集合 ...

  10. Eclipse背景与字体大小和xml文件中字体大小设置

    1.打开window / Preference,弹出Preference面板  2.展开General标签,选中Editors选项,展开.  3.选中 Text Editors,右边出现 TestEd ...