Rain on your Parade---hdu2389(HK求最大匹配)
题意:有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求最大匹配)的更多相关文章
- 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 ...
- 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 ...
- 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 ...
- HDU2389 Rain on your Parade —— 二分图最大匹配 HK算法
题目链接:https://vjudge.net/problem/HDU-2389 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) ...
- HDU2389:Rain on your Parade(二分图最大匹配+HK算法)
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
- 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 ...
- Rain on your Parade
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
- HDOJ 2389 Rain on your Parade
HK.... Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K ...
- HDU2389(KB10-F 二分图最大匹配Hopcroft_Karp)
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
随机推荐
- VirtualBox 配置虚拟网卡(桥接),实现主机-虚拟机网络互通
记录下VirtualBox 配置虚拟网卡(桥接),实现主机-虚拟机网络互通过程,网上搜出来的比较乱,讲的不明不白,因此根据自己弄过一次,确认可行的方式,做个备份,方便日后查阅. 环境: 在Oracle ...
- Maven-使用及常见问题
一.Maven是什么? 管理jar包用的,以前jar包是自己下载,然后放在lib下,然后add build Path,Maven环境下,只需要添加坐标(实际是xml片段)便会根据坐标自行下载. 二.M ...
- Solr with Apache Tomcat
配置教程 1 http://www.duntuk.com/how-install-apache-solr-46-apache-tomcat-7-use-drupal https://www.gotos ...
- 怎么用MathType输入对数函数
MathType是一款强大的公式编辑软件,但是一些新手用户对于其应用还不是那么熟练,很多的操作不是很精通.比如,怎么用MathType输入对数函数.下面就给大家介绍介绍MathType对数函数的输入方 ...
- meta标签整理
meta指元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词.标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称/值对. 一 ...
- Oracle Merge Into Insert/Update
出自:http://blog.csdn.net/yuzhic/article/details/1896878 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明 ...
- QlikView报表显示连续若干个月内活跃用户的数量
之前有朋友提到了这样一个需求,要计算三年中每年都有销售记录的客户量,仅仅有近期两年有销售纪录的客户量(假如某个用户2012年和2014年都有记录,在2013年没有则不计算在内).以及近期一年的新增客户 ...
- 工作流JBPM_day01:6-执行流程实例
工作流JBPM_day01:6-执行流程实例 执行流程 启动流程实例 查询任务列表 办理任务 向后执行一步 先部署流程定义在启动流程实例 Jbpm4_execution表表示正在执行的流程实例的的信息 ...
- POJ 1742 Coins(多重背包, 单调队列)
Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ...
- swift - UISlider 的用法
swift的UISlider的用法和oc基本没有区别 1.创建 class SecondViewController: UIViewController { var slider = UISlider ...