Rain on your Parade
Rain on your Parade
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Others)
Total Submission(s): 2113 Accepted Submission(s): 647
Problem Description
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.
Input
The input starts with a line containing a single integer, the number of test cases.
Each test case starts with a line containing the time t in minutes until it will start to rain (1 <=t <= 5). The next line contains the number of guests m (1 <= m <= 3000), followed by m lines containing x- and y-coordinates as well as the speed si in units per minute (1 <= si <= 3000) of the guest as integers, separated by spaces. After the guests, a single line contains n (1 <= n <= 3000), the number of umbrellas, followed by n lines containing the integer coordinates of each umbrella, separated by a space.
The absolute value of all coordinates is less than 10000.
Output
For each test case, write a line containing “Scenario #i:”, where i is the number of the test case starting at 1. Then, write a single line that contains the number of guests that can at most reach an umbrella before it starts to rain. Terminate every test case with a blank line.
Sample Input
2
1
2
1 0 3
3 0 3
2
4 0
6 0
1
2
1 1 2
3 3 2
2
2 2
4 4
Sample Output
Scenario #1:
2
Scenario #2:
2
Source
HDU 2008-10 Public Contest
Recommend
lcy
一看就是求二分图的最大匹配,不过点太多了匈牙利不行,要用Hopcroft_Karp.别人的代码没看懂,不过幸好接口用起来挺方便.贴上大牛的代码:
#include<cstring> //HK算法。。
#include<queue>
#include<cmath>
#include<cstdio>
#include<vector> using namespace std;
const int maxn=;
int n,m;
struct Pos{
int x,y;
}man[maxn],umbr[maxn];
vector<int> child[maxn];
int speed[maxn];//人的速度
int cx[maxn],cy[maxn];//集合X Y的匹配值
int distx[maxn],disty[maxn];//记录距离 bool bfs(){
bool flag=false;
memset(distx,,sizeof(distx));//距离初始为0
memset(disty,,sizeof(disty)); queue<int> que;
for(int i=;i<=n;i++)//把X集合中 所有未匹配的加入队列
if(cx[i]==-)
que.push(i);
while(!que.empty())//集合非空
{
int x=que.front();
que.pop();
for(int i = ; i < child[ x ].size() ; i++ )//所有以i为起点的边
{
int y = child[ x ][ i ];
if( !disty[ y ] )//该边未被使用
{
disty[ y ]=distx[ x ] + ;//距离+1
if(cy[ y ] == -) flag=true;//该点未被使用可以增加匹配
else
{
distx[ cy[ y ] ]= disty[ y ] + ;
que.push( cy[ y ] );
}
}
}
}
return flag;
}
bool dfs(int x){//寻找增广路
for(int i=;i<child[x].size();i++)//枚举所有以i为起点的边
{
int y=child[x][i];
if(disty[ y ] == distx[ x ]+)//距离刚好为1表明相连
{
disty[ y ] = ;
if(cy[ y ] == - || dfs( cy[ y ] ))//找到一条增广路
{
cx[ x ] = y ; cy[ y ] = x;//保存匹配值
return true;
}
}
}
return false;
}
int Hopcroft_Karp(){
memset(cx,-,sizeof(cx));
memset(cy,-,sizeof(cy));
int ans=;
while(bfs())//如果距离更新成功,X集合中每一个点找一次增广路
{
for(int i=;i<=n;i++)
if(cx[i]==- && dfs(i))
ans++;
}
return ans;
} double dis(int i,int j){
return sqrt( (double)(man[i].x-umbr[j].x)*(man[i].x-umbr[j].x)+ (man[i].y-umbr[j].y)*(man[i].y-umbr[j].y) );
}
int main(){
int t,cas=,time;
scanf("%d",&t);
while(t--){
scanf("%d%d",&time,&n);
for(int i=;i<=n;i++)
scanf("%d%d%d",&man[i].x,&man[i].y,&speed[i]); scanf("%d",&m);
for(int i=;i<=m;i++)
scanf("%d%d",&umbr[i].x,&umbr[i].y); for(int i=;i<=n;i++)
child[i].clear(); for(int i=;i<=n;i++)//能够在下雨前拿到伞的建一条边
for(int j=;j<=m;j++)
if(speed[i]*time >= dis(i,j))
child[i].push_back(j); printf("Scenario #%d:\n",++cas);
printf("%d\n",Hopcroft_Karp());
printf("\n"); }
}
Rain on your Parade的更多相关文章
- HDOJ 2389 Rain on your Parade
HK.... Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K ...
- 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二分图最大匹配)
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-Carp算法)
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
- 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——————【Hopcroft-Karp求最大匹配、sqrt(n)*e复杂度】
Rain on your Parade Time Limit:3000MS Memory Limit:165535KB 64bit IO Format:%I64d & %I64 ...
- HDU2389 Rain on your Parade —— 二分图最大匹配 HK算法
题目链接:https://vjudge.net/problem/HDU-2389 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) ...
- Hdu 3289 Rain on your Parade (二分图匹配 Hopcroft-Karp)
题目链接: Hdu 3289 Rain on your Parade 题目描述: 有n个客人,m把雨伞,在t秒之后将会下雨,给出每个客人的坐标和每秒行走的距离,以及雨伞的位置,问t秒后最多有几个客人可 ...
- 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 ...
随机推荐
- WP_Image_Editor_Imagick 漏洞临时解决方法
导读 阿里云推送的一条短信通知:存放在上面的WordPress程序有WP_Image_Editor_Imagick漏洞问题,需要登入后台补丁等等的暗示.当然,如果需要在线补丁则需要升级阿里云的安骑士专 ...
- 浅析django的abstract,proxy, managed
django.db.models.Model 的 Meta参数 参数 类型 说明 继承 abstract boolean 是否建表 不继承,子类自动充值为默认值(False) managed bool ...
- MVC(Model(模型) View(视图) Controller(控制器))
复习 1. 商品表 增删改查 index.php add.php view.php edit.php action.php 2. MVC(Model(模型) Vie ...
- iOS和android游戏纹理优化和内存优化(cocos2d-x)(转载)
转自http://blog.csdn.net/langresser_king/article/details/8426708 (未完成) 1.2d游戏最占内存的无疑是图片资源. 2.cocos2d-x ...
- iOS 使用interface builder 创建太复杂的constrains时容易产生crash
今天写程序,遇到了crash,在界面初始化时不会有,想切换到别的tab页就报错了.主要内容如下: Cannot find an outgoing row head for incoming head ...
- (转)SQL Server 中的事务和锁(三)-Range S-U,X-X 以及死锁
在上一篇中忘记了一个细节.Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔离级别中,为了保护范围内的数据不被并发的事务影响而使用的一类锁模式(避 ...
- Java for LeetCode 042 Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- IE的浏览器模式和文档模式
只有IE浏览器中才会有“浏览器模式”和“文档模式”,兼容性视图涉及两个重要的功能 便是“浏览器模式[browser mode]”和“文档模式[document mode]”,在IE8/IE9中按F12 ...
- C++拷贝构造函数(深拷贝,浅拷贝)
http://www.cnblogs.com/BlueTzar/articles/1223313.html 对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; ...
- php 指针遍历、预定义数组和常用函数
<?php /*//定义 $attr = array(1,2,3); $attr[] = 1; $attr = array("one"=>"hello&quo ...