链接:

https://vjudge.net/problem/HDU-2389

题意:

You’re giving a party in the garden of your villa by the sea. The party is a huge success, and everyone is here. It’s a warm, sunny evening, and a soothing wind sends fresh, salty air from the sea. The evening is progressing just as you had imagined. It could be the perfect end of a beautiful day.

But nothing ever is perfect. One of your guests works in weather forecasting. He suddenly yells, “I know that breeze! It means its going to rain heavily in just a few minutes!” Your guests all wear their best dresses and really would not like to get wet, hence they stand terrified when hearing the bad news.

You have prepared a few umbrellas which can protect a few of your guests. The umbrellas are small, and since your guests are all slightly snobbish, no guest will share an umbrella with other guests. The umbrellas are spread across your (gigantic) garden, just like your guests. To complicate matters even more, some of your guests can’t run as fast as the others.

Can you help your guests so that as many as possible find an umbrella before it starts to pour?

Given the positions and speeds of all your guests, the positions of the umbrellas, and the time until it starts to rain, find out how many of your guests can at most reach an umbrella. Two guests do not want to share an umbrella, however.

思路:

二分图最大匹配,匈牙利算法超时。改用hopcroft-karp算法。

吧能在时间内跑到的伞加到人的配对上,hopcroft-karp算法还不是太懂。

代码:

#include <iostream>
#include <cstdio>
#include <vector>
#include <memory.h>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
using namespace std;
const int MAXN = 3e3+10;
const int INF = 1<<30; struct Node
{
double x, y;
};
Node P[MAXN], U[MAXN];
vector<int> G[MAXN];
double Speed[MAXN];
int Link_l[MAXN], Vis[MAXN];
int Link_r[MAXN];
int Dis_x[MAXN], Dis_y[MAXN];
int n, m;
int dis; double GetLen(Node a, Node b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} bool Search()
{
memset(Dis_x, -1, sizeof(Dis_x));
memset(Dis_y, -1, sizeof(Dis_y));
dis = INF;
queue<int> que;
for (int i = 1;i <= m;i++)
{
if (Link_r[i] == -1)
que.emplace(i);
Dis_x[i] = 0;
}
while (!que.empty())
{
int u = que.front();
que.pop();
if (Dis_x[u] > dis)
break;
for (int i = 0;i < G[u].size();i++)
{
int node = G[u][i];
if (Dis_y[node] == -1)
{
Dis_y[node] = Dis_x[u]+1;
if (Link_l[node] == -1)
dis = Dis_y[node];
else
{
Dis_x[Link_l[node]] = Dis_y[node]+1;
que.push(Link_l[node]);
}
}
}
}
return dis != INF;
} bool Dfs(int x)
{
for (int i = 0;i < G[x].size();i++)
{
int node = G[x][i];
if (Vis[node] || Dis_y[node] != Dis_x[x]+1)
continue;
Vis[node] = 1;
if (Link_l[node] != -1 && Dis_y[node] == dis)
continue;
if (Link_l[node] == -1 || Dfs(Link_l[node]))
{
Link_l[node] = x;
Link_r[x] = node;
return true;
}
}
return false;
} int Solve()
{
memset(Link_l, -1, sizeof(Link_l));
memset(Link_r, -1, sizeof(Link_r));
int cnt = 0;
while (Search())
{
memset(Vis, 0, sizeof(Vis));
for (int i = 1;i <= m;i++)
{
if (Link_r[i] == -1 && Dfs(i))
cnt++;
}
}
return cnt;
} int main()
{
int t, cnt = 0;
scanf("%d", &t);
while (t--)
{
int time;
scanf("%d", &time);
scanf("%d", &m);
for (int i = 1;i <= m;i++)
G[i].clear();
for (int i = 1;i <= m;i++)
scanf("%lf%lf%lf", &P[i].x, &P[i].y, &Speed[i]);
scanf("%d", &n);
for (int i = 1;i <= n;i++)
scanf("%lf%lf", &U[i].x, &U[i].y);
for (int i = 1;i <= m;i++)
{
for (int j = 1;j <= n;j++)
{
double len = GetLen(P[i], U[j]);
if (len/Speed[i] <= time)
G[i].push_back(j);
}
}
int sum = Solve();
printf("Scenario #%d:\n%d\n\n", ++cnt, sum);
} return 0;
}

HDU-2389-Rain on your Parade (最大匹配,kopcroft-karp)的更多相关文章

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

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

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

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

  4. HDU 2389 Rain on your Parade(二分匹配,Hopcroft-Carp算法)

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

  5. HDU 2389 Rain on your Parade

    大意:在一个二维坐标系上有nx个人和ny把伞,每个人都有自己的移动速度,问有多少人可以再 time 时间内移动到不同的雨伞处(不允许两个人共用一把伞).   输入数据: 第一行是一个T代表T组测试数据 ...

  6. Hdu 3289 Rain on your Parade (二分图匹配 Hopcroft-Karp)

    题目链接: Hdu 3289 Rain on your Parade 题目描述: 有n个客人,m把雨伞,在t秒之后将会下雨,给出每个客人的坐标和每秒行走的距离,以及雨伞的位置,问t秒后最多有几个客人可 ...

  7. HDOJ 2389 Rain on your Parade

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

  8. 【HDOJ】2389 Rain on your Parade

    读题显然是二分图匹配,看成guest与umbrella的匹配.匈牙利果断TLE了,其实时间卡的相当紧.HK过的,750ms. /* 2389 */ #include <iostream> ...

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

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

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

随机推荐

  1. Web02_HTML&CSS

    HTML 表单标签属性介绍 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  2. 【HTML5】---【HTML5提供的一些新的标签用法以及和HTML 4的区别】

    HTML 5 是一个新的网络标准,目标在于取代现有的 HTML 4.01, XHTML 1.0 and DOM Level 2 HTML 标准.它希望能够减少浏览器对于需要插件的丰富性网络应用服务(p ...

  3. PLAT_SYS_USER

    CREATE TABLE "CQTEST"."PLAT_SYS_USER" ( "ID" VARCHAR2(32 BYTE) NOT NUL ...

  4. VMware下的Centos7联网并设置固定IP(nat)

    命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33 如下图所示,加上这四行内容. IPADDR 需要是和网关在同一网段 GATEWAY 参考在虚拟机的na ...

  5. Log的相关用法

    1.最好用静态final定义Log变量 private static final Log log = LogFactory.getLog(MyTest.class); 这样做的好处有三: 可以保证线程 ...

  6. LayUI 多选框动态加载、启用、禁用、赋值、取值等js实现

    例如多选框如下: <div class="layui-form"> <select xm-select="city"> </sel ...

  7. opencv学习之显示图像-imshow函数

    序 上一篇opencv学习之读取图像-imread函数介绍完opencv读取图片函数imread,这次来介绍与它对应的图像显示函数imshow. imshow函数 imshow函数功能 imshow的 ...

  8. MLS(移动最小二乘)

    https://blog.csdn.net/weixin_41484240/article/details/81204113 https://blog.csdn.net/baidu_38127162/ ...

  9. PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.

    /**  * [AesSecurity aes加密,支持PHP7.1]  */ class AesSecurity {     /**      * [encrypt aes加密]      * @p ...

  10. centos7 下网卡的配置

    一般通过修改配置文件的方式去修改: 网卡配置文件位置    /etc/sysconfig/network-scripts/ifcfg-ens33 DNS配置文件位置              /etc ...