传送门

Description

Freda控制着N座可以发射导弹的防御塔。每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚。在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导弹的防御塔需要T2分钟来冷却。

所有导弹都有相同的匀速飞行速度V,并且会沿着距离最短的路径去打击目标。计算防御塔到目标的距离Distance时,你只需要计算水平距离,而忽略导弹飞行的高度。导弹在空中飞行的时间就是 (Distance/V) 分钟,导弹到达目标后可以立即将它击毁。

现在,给出N座导弹防御塔的坐标,M个入侵者的坐标,T1、T2和V,你需要求出至少要多少分钟才能击退所有的入侵者。

Input

第一行五个正整数N,M,T1,T2,V。

接下来M行每行两个整数,代表入侵者的坐标。

接下来N行每行两个整数,代表防御塔的坐标。

Output

输出一个实数,表示最少需要多少分钟才能击中所有的入侵者,四舍五入保留六位小数。

Sample Input

3 3 30 20 1

0 0

0 50

50 0

50 50

0 1000

1000 0

Sample Output

91.500000

HINT

对于40%的数据,N,M<=20.

对于100%的数据, 1≤N≤50, 1≤M≤50,坐标绝对值不超过10000,T1,T2,V不超过2000.

Solution

二分答案

把入侵者当做左部点,向能在时间内打到它的导弹连边,跑最大匹配

这是多重匹配的一种做法即:拆点

​//By Menteur_Hxy
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
using namespace std; int read() {
int x=0,f=1; char c=getchar();
while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
return x*f;
} const int N=60;
int n,m,tot;
int vis[N*N],fr[N*N];
double t1,t2,v;
double tim[N][N];
vector <int> V[N];
struct Poi{int x,y;}I[N],D[N]; bool dfs(int x) {
int siz=V[x].size();
F(i,0,siz-1) { int v=V[x][i];
if(!vis[v]) {
vis[v]=1;
if(!fr[v]||dfs(fr[v])) {
// cout<<x<<" "<<v<<endl;
fr[v]=x;
return 1;
}
}
}
return 0;
} bool jud(double x) {
tot=0;
F(i,1,m) V[i].clear();
F(i,1,m) F(j,1,n) {
double now=0;
F(k,0,m) {
now=k*(t1+t2);
if(x-(now+t1+tim[i][j])>1e-7) {
// cout<<i<<" "<<j<<" "<<k<<endl;
V[i].push_back(j*(m+1)+k-m-1);
}
else break;
// cout<<j*(m+1)+k-m-1<<endl;
}
}
memset(fr,0,sizeof(fr));
F(i,1,m) {
memset(vis,0,sizeof(vis));
if(!dfs(i)) return 0;
}
return 1;
} int main() {
n=read(),m=read(),t1=read()/60.0,t2=read(),v=read();
F(i,1,m) I[i].x=read(),I[i].y=read();
F(i,1,n) D[i].x=read(),D[i].y=read();
F(i,1,m) F(j,1,n) tim[i][j]=sqrt((I[i].x-D[j].x)*(I[i].x-D[j].x)+(I[i].y-D[j].y)*(I[i].y-D[j].y))/v;
// F(i,1,m) F(j,1,n) printf("tim[%d][%d]=%lf\n",i,j,tim[i][j]);
double l=0,r=1000000,ans=r;
while(r-l>1e-9) {
double mid=(l+r)/2.0;
// cout<<mid<<endl;
if(jud(mid)) ans=min(ans,mid),r=mid;
else l=mid;
}
printf("%.6lf",ans);
return 0;
}

[tyvj1935 Poetize3]导弹防御塔 (二分图多重匹配)的更多相关文章

  1. 「Poetize3」导弹防御塔

    描述 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导 ...

  2. CH6803 导弹防御塔

    6803 导弹防御塔 0x60「图论」例题 背景 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛l ...

  3. hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)

    #1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...

  4. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

  5. 稳定的奶牛分配 && 二分图多重匹配+二分答案

    题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...

  6. hiho 第117周 二分图多重匹配,网络流解决

    描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...

  7. bzoj3035: 导弹防御塔

    Description Freda的城堡——“Freda,城堡外发现了一些入侵者!”“喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~”“可是入侵者已经接近城堡了呀!”“别担心,rain ...

  8. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...

  9. POJ2584 T-Shirt Gumbo【二分图多重匹配】

    题目链接: id=2584">http://poj.org/problem?id=2584 题目大意: 如今有5种型号(S.M.L.X.T)的衣服要发放给N个參赛队员.给出每一个參赛者 ...

随机推荐

  1. BPMN使用工具

    EA  非常多设计人员都在使用EA.他不仅支持UML,相同也全然支持BPMN2.0.<BPMN规范中的三种视图 >展示的BPMN中三种视图就是使用此工具所绘制. activitidesig ...

  2. jenkins配置邮箱遇到的问题

    错误一:发送测试邮件测试配置没有填写接收者的邮箱 原因:没有写接收者的邮箱 2.写了接受者的邮箱 密码错误 解决办法:qq邮箱>设置>账户,发送短信后点我已发送,就会接收到密码 3.发送时 ...

  3. 2014百度之星第二题Disk Schedule(双调欧几里得旅行商问题+DP)

    Disk Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  4. 【面试题】Redis相关

    1.Redis与Memorycache的区别? Redis使用单线程,而Memcached是多线程, Redis使用现场申请内存的方式来存储数据,并且可以配置虚拟内存:Memcached使用预分配的内 ...

  5. [C++设计模式] composite 组合模式

    组合(Composite)模式的其他翻译名称也非常多,比方合成模式.树模式等等.在<设计模式>一书中给出的定义是:将对象以树形结构组织起来,以达成"部分-总体"的层次结 ...

  6. oc57--Category 分类

    // // main.m // Category基本使用:1.不修改类而扩充类.2.对于一个庞大的类,分模块开发. #import <Foundation/Foundation.h> #i ...

  7. SQL数据库问题 解释一下下面的代码 sql 存储过程学习

    SQL数据库问题 解释一下下面的代码 2008-08-13 11:30wssqyl2000 | 分类:数据库DB | 浏览1154次 use mastergocreate proc killspid( ...

  8. CodeForces - 811C Vladik and Memorable Trip(dp)

    C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input ...

  9. HDU 2665(主席树,无修改第k小)

    Kth number                                                 Time Limit: 15000/5000 MS (Java/Others)   ...

  10. hdu 2586(Tarjan 离线算法)

    How far away ?                                                                             Time Limi ...