传送门

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. 【SSH之旅】一步步学习Hibernate框架(一):关于持久化

    在不引用不论什么框架下,我们会通过平庸的代码不停的对数据库进行操作,产生了非常多冗余的可是又有规律的底层代码,这样频繁的操作数据库和大量的底层代码的反复书写极大的浪费了程序人员的书写.就在这样一种情况 ...

  2. Android之——AsyncTask和Handler对照

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46952835 AsyncTask和Handler对照 1 ) AsyncTask实 ...

  3. Android中检測字符编码(GB2312,ASCII,UTF8,UNICODE,TOTAL——ENCODINGS)方法(一)

    package com.android.filebrowser;   import java.io.*; import java.net.*;   public class FileEncodingD ...

  4. hdu5119 Happy Matt Friends(dp)

    题目链接:点击打开链接 题目描写叙述:给出n个数.求从这n个数中随意取出一些数(至少取一个)相互异或之后大于m的方案数? 解题思路:分析因为n<=40&&m<=10^6,因 ...

  5. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals

    感觉自己做有关区间的题目方面的思维异常的差...有时简单题都搞半天还完全没思路,,然后别人提示下立马就明白了...=_= 题意:给一个含有n个元素的数组和k,问存在多少个区间的和值为k的次方数. 题解 ...

  6. vbs use

    VBScript中SendKeys的妙用 标签: vbscriptbasicmicrosoftinsertdeletestring 2011-05-26 15:29 1830人阅读 评论(0) 收藏  ...

  7. 【你你你你在开玩笑吧】什么叫凭借纯兴趣搞ACM?涨姿势了

        好长时间不扯淡了,今天扯个玩玩,吐个槽.     在上海回济南的列车上,回顾起这两天在携程codingtrip颁奖仪式上大牛们的种种心得,姿势涨了不少,着实涨了不少啊.我这样的渣渣毕竟图样图森 ...

  8. 84. ExtJS下页面显示中文乱码问题

    转自:https://blog.csdn.net/wenminhao/article/details/51198981 最近在学校extjs是,使用js脚本显示中文在html页面中时,中午出现了乱码的 ...

  9. Android中使用Gson解析JSON数据

      Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...

  10. Find them, Catch them(并查集)

    http://poj.org/problem?id=1703 题意:有两个黑帮团伙,共n名团伙成员(不知道属于这两个黑帮中的哪一个).现在警察有一些信息,每条信息包含2个人的编号,如果给出A a b, ...