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的最远距离,精确到小数点后两位。
二分答案r,对每个点作半径r的圆,判断圆是否切断了(1,1)和(n,m),即从左、上边界能否通过圆走到右/下边界
#include<cstdio>
#include<cmath>
#include<algorithm>
int n;
double xm,ym;
struct pos{double x,y;}ps[];
int q[],ed[];
bool discmp(double x,double y,double z){
return x*x+y*y<z*z;
}
bool chk(double R){
int ql=,qr=;
for(int i=;i<n;i++){
if(ps[i].x-<R||ps[i].y+R>ym){
q[qr++]=i;
ed[i]=;
if(ps[i].x+R>xm||ps[i].y-R<)return ;
}else ed[i]=;
}
while(ql!=qr){
int w=q[ql++];
for(int i=;i<n;i++)if(!ed[i]&&discmp(ps[i].x-ps[w].x,ps[i].y-ps[w].y,R*)){
q[qr++]=i;
ed[i]=;
if(ps[i].x+R>xm||ps[i].y-R<)return ;
}
}
return ;
}
int main(){
scanf("%d%lf%lf",&n,&xm,&ym);
for(int i=;i<n;i++){
scanf("%lf%lf",&ps[i].x,&ps[i].y);
}
double L=,R=xm+ym+;
while(R-L>1e-){
double M=(L+R)/.;
if(chk(M))R=M;
else L=M;
}
printf("%.2lf\n",(L+R)/.);
return ;
}
也可以用最小生成树的kruskal,加边直到发现第一条边使左、上边界与右、下边界连通
#include<cstdio>
#include<cmath>
#include<algorithm>
int n,xm,ym,ep=;
int f[];
struct pos{int x,y;}ps[];
struct edge{int a,b;long long c;}e[];
bool operator<(edge a,edge b){
return a.c<b.c;
}
inline long long min2(long long a,long long b){
a*=a;b*=b;
return a<b?a:b;
}
int get(int x){
int a=x,c;
while(x!=f[x])x=f[x];
while(x!=(c=f[a]))f[a]=x,a=c;
return x;
}
int main(){
scanf("%d%d%d",&n,&xm,&ym);
for(int i=;i<n;i++){
f[i]=i;
scanf("%d%d",&ps[i].x,&ps[i].y);
e[ep++]=(edge){i,n,*min2(xm-ps[i].x,ps[i].y-)};
e[ep++]=(edge){i,n+,*min2(ps[i].x-,ym-ps[i].y)};
for(int j=;j<i;j++){
long long x=ps[i].x-ps[j].x,y=ps[i].y-ps[j].y;
e[ep++]=(edge){i,j,x*x+y*y};
}
}
f[n]=n;f[n+]=n+;
std::sort(e,e+ep);
for(int i=;i<ep;i++){ int a=get(e[i].a),b=get(e[i].b);
if(a!=b){
f[a]=b;
if(get(n)==get(n+)){
printf("%.2f\n",sqrt(e[i].c)/.+1e-);
return ;
}
}
}
return ;
}
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 1password密码文件重装后恢复

    因为重装系统,加上Time machine硬盘损坏. 只能从之前零散Time machine的恢复数据中找到最近的一个备份. 1password是会自己执行备份的,起备份文件在 ~/Library/C ...

  2. view的加载

    这是一个listpopwindow的布局,如果listview在relativeLayout之后写的那么listview就会把relativeLayout给覆盖掉,这证明布局的加载是按照布局文件写的先 ...

  3. Spring学习笔记--spring+mybatis集成

    前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...

  4. Javascript对象属性与方法汇总

    Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...

  5. hdu1827 强连通

    题意:一个人需要联系其他所有人,已知他自己联系每个人的花费,并且他可以联系某个人再让他联系他能联系到的人,给出一系列关系表示 A 能够联系 B.问他最少需要联系多少人,花费多少钱 首先,建成一个有向图 ...

  6. 升级win10的理由

    微软也没给我钱,我免费给它打了次广告. 我还是非常喜欢linux的,无奈公司深度依赖windows. 废话不多说,直接进入主题: [开机速度] 这里先说句题外话,不那么缺钱的兄弟,一定要去换一块SSD ...

  7. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  8. web开发注意的问题

    1.<input type="submit" value="提交">    将表单提交<form action="login.jsp ...

  9. javaweb在线预览

    需要工具: 1.openoffice 将word.excel.ppt.txt等文件转换为pdf文件 2.SWFTool 将pdf转换为swf文件 3.flexPaper是一个开源轻量级的在浏览器上显示 ...

  10. freeswitch 挂断前执行脚本

    通道变量名 api_hangup_hook 介绍在挂断时执行指定API命令 示例 <action application="set" data="api_hangu ...