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的最远距离,精确到小数点后两位。

这里的距离指的是欧几里德距离

首先很容易看出是二分答案

我们可以看成是以每个\(boss\)为圆心作一个半径为\(r\)的圆,我们想要求的就是让这些圆尽可能大,并且不能影响我们从\((1,1)\)到\((n,m)\)。(不能覆盖)

直接考虑边界条件\((n,1)\)和\((1,m)\)如果这两个点没有被覆盖,那我必然可以到达\((n,m)\)

PS:这里的判断条件不是同时判断。

这样用\(||\)判断,可以达到我们边界不被封锁的情况。

并查集维护连通即可。

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define eps 1e-4
#define R register using namespace std; const int gz=3e3+8; inline void in(R int &x)
{
R int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
} int nn,n,m,f[gz]; struct cod
{
int x,y;
}bos[gz]; int find(R int x){return f[x]==x?x:f[x]=find(f[x]);} inline double xx(R double x)
{
return x*x;
} inline double dis(R int i,R int j)
{
return xx(bos[i].x-bos[j].x)+xx(bos[i].y-bos[j].y);
} inline bool ok(R double r)
{
for(R int i=0;i<=nn+1;i++)f[i]=i;
for(R int i=1;i<=nn;i++)
{
for(R int j=1;j<i;j++)
{
if(dis(i,j)<=xx(2*r))
{
R int fa=find(i),fb=find(j);
if(fa!=fb)f[fa]=fb;
}
}
if(bos[i].x-r<=1 or bos[i].y+r>=m)
{
R int fa=find(i),fb=find(0);
if(fa!=fb)f[fa]=fb;
}
if(bos[i].x+r>=n or bos[i].y-r<=1)
{
R int fa=find(i),fb=find(nn+1);
if(fa!=fb)f[fa]=fb;
}
}
return find(0)!=find(nn+1);
} int main()
{
in(nn),in(n),in(m);
for(R int i=1;i<=nn;i++)
in(bos[i].x),in(bos[i].y);
R double ll=0,rr=min(n,m);
while(fabs(ll-rr)>eps)
{
R double mid=(ll+rr)/2;
if(ok(mid))ll=mid;
else rr=mid;
}
printf("%.2f",ll);
}

二分+并查集【bzoj3007】[SDOI2012]拯救小云公主的更多相关文章

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

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

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

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

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

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

  4. 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】

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

  5. P2498 [SDOI2012]拯救小云公主

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

  6. BZOJ 3007 [SDOI2012]拯救小云公主 - 对偶图 + 并查集

    Solution 答案具有单调性, 显然可以二分答案. 有两个注意点 : 英雄是可以随便走的, 也就是不是网格图... 还有坐标不能小于$1$ QAQ 开始时英雄在左下角, 公主在右上角, 我们反过来 ...

  7. [SDOI2012]拯救小云公主

    题解: 是一个不错的题目 首先我们可以考虑二分答案 然后变成判定性问题 对于每个画一个圆 当其会被阻断时就是答案 阻断有四种情况 左下 上下 左右 右上 但是这样是n^2a(n)*logn的 考虑直接 ...

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

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

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

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

随机推荐

  1. Codeforces Round #191 (Div. 2) A. Flipping Game(简单)

    A. Flipping Game time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. uoj311 【UNR #2】积劳成疾

    传送门:http://uoj.ac/problem/311 [题解] 这题的期望dp好神奇啊(可能是我太菜了) 由于每个位置都完全一样,所以我们设$f_{i,j}$表示审了连续$i$个位置,最大值不超 ...

  3. 【NOIP】普及组2009 细胞分裂

    [算法]数论 [题解]均分的本质是A整除B,A整除B等价于A的质因数是B的子集. 1.将m1分解质因数,即m1=p1^a1*p2^a2*...*pk^ak 所以M=m1^m2=p1^(a1*m2)*p ...

  4. Windows.event

    获取鼠标位置 document.getElementById('div').onmousemove = function(e){ //--------Chrome, firefox 支持------- ...

  5. 大聊Python----装饰器

    什么是装饰器? 装饰器其实和函数没啥区别,都是用def去定义的,其本质就是函数,而功能就是装饰其他的函数,说白了就是为其他函数提供附加功能 装饰器有什么作用? 比如你是一个公司的员工,你所写的程序里有 ...

  6. 解决Chrome下表单自动填充后背景色为黄色

    Chrome浏览器在表单自动填充后会显示黄色背景,这是Chrome的私有属性导致,对于有洁癖的人来讲,是不喜欢的,我们可以手动去掉. 代码如下: input:-webkit-autofill { -w ...

  7. Codeforces Round #456 (Div. 2)

    Codeforces Round #456 (Div. 2) A. Tricky Alchemy 题目描述:要制作三种球:黄.绿.蓝,一个黄球需要两个黄色水晶,一个绿球需要一个黄色水晶和一个蓝色水晶, ...

  8. java获取weblogic应用运行路径

    String url = TemplateBuilder(当前类).class.getClassLoader().getResource("").getPath(); String ...

  9. eclipse 常见问题之字体更改、添加注释模板

    有些同学可能会和我有一样的困扰,每次想要更改字体大小.背景颜色等,都需要百度一下才知道怎么去做...不知道有没有这种情况的孩子,反正我经常遇到,老是记不住,今天写下来,顺带自己忘记的时候可以查看一下. ...

  10. swiper (Table切换和动态加载时候出现的问题)

    本文为让心灵-去旅行原创,转载请说明.. 我们在写一个简单的swiper图片轮播的时候很简单,是写死的也就那么几张图片轮播.如果这时候图片和一些东西是后台的,你从js里动态添加到DOM时,这时候你就会 ...