Description

Freda的城堡——
“Freda,城堡外发现了一些入侵者!”
“喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~”
“可是入侵者已经接近城堡了呀!”
“别担心,rainbow,你看呢,这是我刚设计的导弹防御系统的说~”
“喂...别卖萌啊……”

Freda控制着N座可以发射导弹的防御塔。每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚。在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导弹的防御塔需要T2分钟来冷却。
所有导弹都有相同的匀速飞行速度V,并且会沿着距离最短的路径去打击目标。计算防御塔到目标的距离Distance时,你只需要计算水平距离,而忽略导弹飞行的高度。导弹在空中飞行的时间就是 (Distance/V) 分钟,导弹到达目标后可以立即将它击毁。
现在,给出N座导弹防御塔的坐标,M个入侵者的坐标,T1、T2和V,你需要求出至少要多少分钟才能击退所有的入侵者。

Input

第一行五个正整数N,M,T1,T2,V。
接下来M行每行两个整数,代表入侵者的坐标。
接下来N行每行两个整数,代表防御塔的坐标。

Output

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

二分答案,网络流判定
  1. #include<cstdio>
  2. #include<cmath>
  3. const int N=;
  4. int n,m,S,T;
  5. int mx[],my[],nx[],ny[];
  6. int es[N],enx[N],e0[N],ep,h[N],q[N],ev[N];
  7. double t1,t2,v;
  8. bool bfs(){
  9. for(int i=;i<=T;i++)h[i]=;
  10. int ql=,qr=;
  11. h[q[qr++]=S]=;
  12. while(ql!=qr){
  13. int w=q[ql++];
  14. for(int i=e0[w];i;i=enx[i])if(ev[i]){
  15. int u=es[i];
  16. if(!h[u])h[q[qr++]=u]=h[w]+;
  17. }
  18. }
  19. return h[T];
  20. }
  21. int dfs(int w,int f){
  22. if(w==T)return f;
  23. int c,used=;
  24. for(int i=e0[w];i;i=enx[i])if(ev[i]){
  25. int u=es[i];
  26. if(h[u]!=h[w]+)continue;
  27. c=f-used;
  28. if(c>ev[i])c=ev[i];
  29. c=dfs(u,c);
  30. ev[i]-=c;
  31. ev[i^]+=c;
  32. used+=c;
  33. if(f==used)return f;
  34. }
  35. h[w]=;
  36. return used;
  37. }
  38. inline void adde(int a,int b){
  39. es[ep]=b;enx[ep]=e0[a];ev[ep]=;e0[a]=ep++;
  40. es[ep]=a;enx[ep]=e0[b];ev[ep]=;e0[b]=ep++;
  41. }
  42. bool chk(double t){
  43. ep=;
  44. S=n*m+m+;T=S+;
  45. for(int i=;i<=T;i++)e0[i]=;
  46. for(int i=;i<=n;i++){
  47. for(int k=;k<m;k++){
  48. adde(S,(i-)*m+k+);
  49. }
  50. }
  51. for(int i=;i<=m;i++)adde(n*m+i,T);
  52. for(int i=;i<=n;i++){
  53. for(int j=;j<=m;j++){
  54. double x=mx[j]-nx[i],y=my[j]-ny[i];
  55. double tm=sqrt(x*x+y*y)/v;
  56. if(tm>t)continue;
  57. for(int k=;k<m;k++)if(tm+t1+(t1+t2)*k<=t){
  58. adde((i-)*m+k+,n*m+j);
  59. }
  60. }
  61. }
  62. int ans=;
  63. while(bfs())ans+=dfs(S,0x3f3f3f3f);
  64. return ans==m;
  65. }
  66. int main(){
  67. scanf("%d%d%lf%lf%lf",&n,&m,&t1,&t2,&v);
  68. for(int i=;i<=m;i++)scanf("%d%d",mx+i,my+i);
  69. for(int i=;i<=n;i++)scanf("%d%d",nx+i,ny+i);
  70. t1/=.;
  71. double L=,R=1e5;
  72. for(int i=;i<;i++){
  73. double M=(L+R)*.;
  74. if(chk(M))R=M;
  75. else L=M;
  76. }
  77. printf("%.6f\n",L);
  78. return ;
  79. }

bzoj3035: 导弹防御塔的更多相关文章

  1. 「Poetize3」导弹防御塔

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

  2. [tyvj1935 Poetize3]导弹防御塔 (二分图多重匹配)

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

  3. CH6803 导弹防御塔

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

  4. 【NOIP2013模拟】导弹防御塔

    题目 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~" "可是入侵者 ...

  5. Codevs2490 导弹防御塔

    2490 导弹防御塔 2490 导弹防御塔 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master         题目描述 Description Freda的城堡—— ...

  6. contest hunter 6803 导弹防御塔

    没什么好写的.写写这题吧 拆点,把一个防御塔拆成m个,表示第i次攻击.瞎yy就好啊 #include<cstdio> #include<iostream> #include&l ...

  7. 【CH6803】导弹防御塔

    题目大意:给定 N 座塔,M 个怪物,每座塔一次可以发射一枚导弹,发射导弹有发射时间和冷却时间,每座塔和每只怪物有自己的二维坐标,所有导弹有一个共同的速度,求至少需要多长时间才能将所有怪物消灭. 题解 ...

  8. JoyOI1935 导弹防御塔

    原题链接 首先可以二分答案,然后考虑检验答案. 我们可以对炮塔进行拆点,即能发射\(x\)颗导弹就拆成\(n\times x\)个点,作为一个集合,另一个集合则是\(m\)个侵入者,然后对于能在剩余时 ...

  9. joyoi1935 「Poetize3」导弹防御塔

    #include <iostream> #include <cstring> #include <cstdio> #include <queue> #i ...

随机推荐

  1. 完全搞懂傅里叶变换和小波(1)——总纲<转载>

    无论是学习信号处理,还是做图像.音视频处理方面的研究,你永远避不开的一个内容,就是傅里叶变换和小波.但是这两个东西其实并不容易弄懂,或者说其实是非常抽象和晦涩的! 完全搞懂傅里叶变换和小波,你至少需要 ...

  2. POJ 3268 Silver Cow Party (双向dijkstra)

    题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

  3. ZOJ 1024 Calendar Game

    原题链接 题目大意:2001年11月4日是一个黄道吉日,有两个人做游戏,看谁先数到这个日子.可以往后数一天,比如2号到3号,30号到31号,也可以往后数一个月.给出一个起始的日子,求能否保证先开始游戏 ...

  4. Matlab优化存储器读写来改善程序性能

    最近用Matlab写程序的时候终于遇到了程序执行效率的问题,于是在Google上面搜索了一篇提高代码性能的文章,简单的概括一下. 文章是通过优化寄存器读写来提高执行速度的,主要体现在三个方面: 在做循 ...

  5. HTML <area> 标签 带有可点击区域的图像映射(图像映射指的是带有可点击区域的图像)

    例子: <img src="planets.gif" width="145" height="126" alt="Plane ...

  6. cnblogs.com的用户体验

    用户体验: 作为博客园的用户,我们觉得博客园的用户体验还是很不错的.但是我们觉得主界面有些混乱,一登录进去太多东西,完全不明白怎么分的类. 评价cnblogs.com的用户体验 1.你是什么样的用户, ...

  7. Roman to Integer

    Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...

  8. 越狱Season 1-Episode 10: Sleight of Hand

    Season 1, Episode 10: Sleight of Hand -John: Bellick. Bellick What's going on? 这里发生什么了 -Berwick: Tha ...

  9. ndk-build出错,错误以及解决办法如下

    用NDK编译jni目录下的文件了,我的系统是Ubuntu10.04,NDK版本是android-ndk-r7b. 切换到工程的jni目录下执行:ndk-build(ndk-build的路径已经添加到系 ...

  10. MFC应用程序框架(转)

    对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便.其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用 ...