3007: 解救小云公主

Time Limit: 5 Sec  Memory Limit: 512 MB

Submit: 159  Solved: 71

[

id=3007" style="color:blue; text-decoration:none">Submit][Status][

id=3007" style="color:blue; text-decoration:none">Discuss]

Description

    英雄又即将踏上解救公主的道路……
    这次的解救目标是——爱和正义的小云公主。
    英雄来到boss的洞穴门口。他一下子就懵了。由于面前不仅仅是一仅仅boss,而是上千仅仅boss。当英雄意识到自己还是等级1的时候,他明确这就是一个不可能完毕的任务。
    但他不死心。他在想,能不能避开boss去解救公主呢,嘻嘻。
    Boss的洞穴能够看成一个矩形,英雄在左下角(1,1),公主在右上角(row,line)。英雄为了避开boss,当然是离boss距离越远越好了,所以英雄决定找一条路径使到距离boss的最短距离最远。

Ps:英雄走的方向是随意的。

    你能够帮帮他吗?
    当英雄找到了漂亮漂亮的小云公主,立马就被boss包围了!!。英雄缓闭双眼,举手轻挥,白光一闪后使用了回城卷轴,回到了城堡,但仅仅有小云公主回去了……由于英雄忘了进入回城的法阵了。
 

Input

    第一行,输入三个整数,n表示boss的数目,row。line表示矩形的大小;
    接下来n行,每行分别两个整数表示boss的位置坐标。
 

Output

    输出一个小数。表示英雄的路径离boss的最远距离,精确到小数点后两位。
 

Sample Input

1 3 3

2 2



输出例子1:

1.00



输入例子2:

1 3 3

3 1



输出例子2:

2.00


Sample Output

HINT

100%数据。n<=3000;

思路不错的一道题。

随意两个圆之间连边,长度为圆心距的一半。

然后问题转化为,从左上两条边到右下两条边找一条路径。使得路径上的最大边最小。SPFA。

注意ans的初值是圆心到起点和终点距离的最小值。(详见程序)


  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. #include<queue>
  8. #define F(i,j,n) for(int i=j;i<=n;i++)
  9. #define D(i,j,n) for(int i=j;i>=n;i--)
  10. #define ll long long
  11. #define maxn 3005
  12. using namespace std;
  13. int n,nx,ny,s,t;
  14. double ans,dis[maxn],g[maxn][maxn];
  15. bool inq[maxn];
  16. struct data{int x,y;}a[maxn];
  17. const double inf=1e10;
  18. queue<int> q;
  19. inline int read()
  20. {
  21. int x=0,f=1;char ch=getchar();
  22. while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
  23. while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  24. return x*f;
  25. }
  26. inline double getdis(data a,data b)
  27. {
  28. double x=a.x-b.x,y=a.y-b.y;
  29. return sqrt(x*x+y*y);
  30. }
  31. inline void spfa()
  32. {
  33. F(i,1,t) dis[i]=inf;
  34. dis[s]=0;inq[s]=true;q.push(s);
  35. while (!q.empty())
  36. {
  37. int x=q.front();q.pop();inq[x]=false;
  38. F(i,1,t) if (x!=i&&max(dis[x],g[x][i])<dis[i])
  39. {
  40. dis[i]=max(dis[x],g[x][i]);
  41. if (!inq[i]) inq[i]=true,q.push(i);
  42. }
  43. }
  44. }
  45. int main()
  46. {
  47. n=read();nx=read();ny=read();
  48. s=n+1;t=n+2;
  49. F(i,1,n) a[i].x=read(),a[i].y=read();
  50. F(i,1,n) g[s][i]=g[i][s]=min(a[i].x-1,ny-a[i].y),g[i][t]=g[t][i]=min(a[i].y-1,nx-a[i].x);
  51. F(i,1,n) F(j,i,n) g[i][j]=g[j][i]=getdis(a[i],a[j])/2;
  52. ans=inf;
  53. F(i,1,n) ans=min(ans,getdis(a[i],(data){1,1})),ans=min(ans,getdis(a[i],(data){nx,ny}));
  54. g[s][t]=g[t][s]=min(nx-1,ny-1);
  55. spfa();
  56. ans=min(ans,dis[t]);
  57. printf("%.2lf\n",ans);
  58. }

bzoj3007 解救小云公主的更多相关文章

  1. bzoj3007: 拯救小云公主

    Description     英雄又即将踏上拯救公主的道路……     这次的拯救目标是——爱和正义的小云公主.     英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是 ...

  2. bzoj3007: 拯救小云公主(二分+并查集)

    挺水的题...好多题解说是对偶图,其实感觉不能算严格意义上的对偶图吧QAQ 先二分答案r,然后以boss为中心半径为r的圆不能走,求能否从左下走到右上. 不能从左下走到右上,说明这堆圆把图隔开了,于是 ...

  3. BZOJ 3007 解救小云公主 二分答案+对偶图

    题目大意:给定一个矩形和矩形内的一些点.求一条左下角到右上角的路径.使全部点到这条路径的最小距离最大 最小距离最大.果断二分答案 如今问题转化成了给定矩形中的一些圆形障碍物求左下角和右上角是否连通 然 ...

  4. 【BZOJ3007】拯救小云公主 二分+几何+对偶图

    [BZOJ3007]拯救小云公主 Description     英雄又即将踏上拯救公主的道路……     这次的拯救目标是——爱和正义的小云公主.     英雄来到boss的洞穴门口,他一下子就懵了 ...

  5. 二分+并查集【bzoj3007】[SDOI2012]拯救小云公主

    Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...

  6. 【bzoj3007】拯救小云公主 二分+对偶图+并查集

    题目描述 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等 ...

  7. 【BZOJ】【3007】拯救小云公主

    思路题 我的naive的做法是二分答案+判定是否有路径可走……但是没有正确理解[走的方向任意]这句话…… 其实就是说想咋走咋走= =360°无死角乱走…… 所以其实是个平面上的问题…… 我们可以换个方 ...

  8. BZOJ:4219: 跑得比谁都快 3007: 拯救小云公主

    4219: 跑得比谁都快 3007: 拯救小云公主 三角剖分的解释可以看这里:http://www.cnblogs.com/Enceladus/p/6706444.html 后一道是前一道的弱化版. ...

  9. 洛谷 P2498 [SDOI2012]拯救小云公主 解题报告

    P2498 [SDOI2012]拯救小云公主 题目描述 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到\(boss\)的洞穴门口,他一下子就懵了,因为面前不只是一 ...

随机推荐

  1. 【Linux指标】内存篇

    1:内存使用率 指标名称 指标含义 单位 采集方式(Linux) 采集方式(Windows) AGT.可用内存 GB 通过/proc/meminfo得到MemAvailable;若/proc/memi ...

  2. TensorFlow学习笔记 速记1——tf.nn.dropout

    tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None,name=None)  上面方法中常用的是前两个参数: 第一个参数 x:指输入: 第二个 ...

  3. nginx.conf 详细

    ##定义nginx运行的用户各用户组user nginx nginx; ##nginx进程数,建议设置与cpu核心数一致worker_processes 1; ##全局错误日志定义类型[ debug ...

  4. sqlserver获取当月、年的第一天和最后一天

    -- 当月第一天select dateadd(month, datediff(month, 0, getdate()), 0) -- 当月最后一天(思路:下月的第一天减去一天)select datea ...

  5. Stage3D&Away3D整理ppt

    资料下载地址:http://files.cnblogs.com/xignzou/away3D%E6%A1%86%E6%9E%B6%E5%AD%A6%E4%B9%A0%E5%88%86%E4%BA%AB ...

  6. 12.extern(转)

    本文转自:http://blog.csdn.net/xingjiarong/article/details/47656339 利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数 ...

  7. bwlabel

    bwlabel是用来标记二维的二值图像中的连通组的,简言之,就是黑背景下面有多少白的块,也就是从黑背景甄别白块块的. L = bwlabel(BW, n) returns a matrix L, of ...

  8. uva753 A Plug for UNIX 网络流最大流

    C - A Plug for UNIX    You are in charge of setting up the press room for the inaugural meeting of t ...

  9. I.MX6 Ethernet MAC (ENET) MAC Address hacking

    /********************************************************************* * I.MX6 Ethernet MAC (ENET) M ...

  10. src.rpm包安装方法

    有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译.这类软件包有多种安装方法,以redhat为例说明如下: 注意: 如果没有rpmbuild可以从系统安装光 ...