HDU-2389-Rain on your Parade (最大匹配,kopcroft-karp)
链接:
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)的更多相关文章
- HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】
<题目链接> 题目大意:有m个宾客,n把雨伞,预计时间t后将会下大雨,告诉你每个宾客的位置和速度,每把雨伞的位置,问你最多几个宾客能够拿到伞. 解题分析: 本题就是要我们求人与伞之间的最大 ...
- 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 ...
- 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(二分匹配,Hopcroft-Carp算法)
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
- HDU 2389 Rain on your Parade
大意:在一个二维坐标系上有nx个人和ny把伞,每个人都有自己的移动速度,问有多少人可以再 time 时间内移动到不同的雨伞处(不允许两个人共用一把伞). 输入数据: 第一行是一个T代表T组测试数据 ...
- Hdu 3289 Rain on your Parade (二分图匹配 Hopcroft-Karp)
题目链接: Hdu 3289 Rain on your Parade 题目描述: 有n个客人,m把雨伞,在t秒之后将会下雨,给出每个客人的坐标和每秒行走的距离,以及雨伞的位置,问t秒后最多有几个客人可 ...
- HDOJ 2389 Rain on your Parade
HK.... Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K ...
- 【HDOJ】2389 Rain on your Parade
读题显然是二分图匹配,看成guest与umbrella的匹配.匈牙利果断TLE了,其实时间卡的相当紧.HK过的,750ms. /* 2389 */ #include <iostream> ...
- 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 Problem Description You’re giving a party in the garden of your villa by the sea ...
随机推荐
- 慕课网_文件传输基础——Java IO流
第1章 文件的编码 1-1 文件的编码 (15:07) 第2章 File 类的使用 2-1 File 类常用 API 介绍 (10:50) import java.io.File; import ja ...
- 重叠IO 模型
1. 重叠模型的优点 2. 重叠模型的基本原理 3. 关于重叠模型的基础知识 4. 重叠模型的实现步骤 5. 多客户端情况的注意事项 一.重叠模型的优点 1.可以运行在支持Winsock2的所有W ...
- C++中sort函数使用方法
一.sort函数 1.sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考 ...
- IDEA github 上传项目, 拉取, 删除
1.IDEA登录github账号 settings -> Version Controller -> GitHub 用户名密码登录 或token登录都可以 2.VCS -> impo ...
- windows jenkins 发布 springboot项目脚本
windows jenkins 发布 springboot项目脚本 1.关闭现有程序 (按端口关闭) [与按应用关闭 二选一] @echo off for /f "tokens=1-5&q ...
- [转帖]PostgreSQL pg_dump&psql 数据的备份与恢复
PostgreSQL pg_dump&psql 数据的备份与恢复 https://www.cnblogs.com/chjbbs/p/6480687.html 文章写的挺好 今天试了下 挺不 ...
- google map api key配置
https://console.cloud.google.com/google/maps-apis/apis/maps-backend.googleapis.com/credentials?proje ...
- mysql8无法用navicat连接(mysql8加密方式的坑)
关键词:mysql8无法用navicat连接,navicat无法连接mysql8,mysql8,mysql8的加密方式 [1]mysql8 的坑 密码加密规则 在MySQL 8.0.以上版本中,cac ...
- 关于eclipse设置JRebel
版本:eclipse ee Version: 2018-09 (4.9.0) jrebel:最新2019-2 1.在eclipse->help->eclipse Marketplace 2 ...
- scrapy之盗墓笔记三级页面爬取
#今日目标 **scrapy之盗墓笔记三级页面爬取** 今天要爬取的是盗墓笔记小说,由分析该小说的主要内容在三级页面里,故需要我们 一一解析 *代码实现* daomu.py ``` import sc ...