题目大意:给定一个矩形和矩形内的一些点。求一条左下角到右上角的路径。使全部点到这条路径的最小距离最大

最小距离最大。果断二分答案

如今问题转化成了给定矩形中的一些圆形障碍物求左下角和右上角是否连通

然后就是对偶图的问题了

左下角和右上角连通等价于对偶图中左上两条边和右下两条边不连通

因此将全部相交的圆之间连边,从左上两条边广搜就可以

时间复杂度O(n^2log(min(r,l)/EPS))

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 3030
#define S 0
#define T (n+1)
using namespace std;
struct Point{
double x,y;
friend istream& operator >> (istream &_,Point &p)
{
scanf("%lf%lf",&p.x,&p.y);
return _;
}
friend double Distance(const Point &p1,const Point &p2)
{
return sqrt( (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y) );
}
}pos,points[M];
struct abcd{
int to,next;
}table[M*M];
int head[M],tot;
int n;
double dis[M][M];
void Initialize()
{
memset(head,0,sizeof head);
tot=0;
}
void Add(int x,int y)
{
table[++tot].to=y;
table[tot].next=head[x];
head[x]=tot;
}
bool BFS()
{
static int q[M];
static bool v[M];
int i,r=0,h=0;
memset(v,0,sizeof v);
v[S]=true;q[++r]=S;
while(r!=h)
{
int x=q[++h];
for(i=head[x];i;i=table[i].next)
if(!v[table[i].to])
{
v[table[i].to]=true;
q[++r]=table[i].to;
if(table[i].to==T)
return true;
}
}
return false;
}
bool Judge(double r)
{
int i,j;
Initialize();
for(i=1;i<=n;i++)
{
if( points[i].x-1<r || pos.y-points[i].y<r )
Add(S,i);
if( points[i].y-1<r || pos.x-points[i].x<r )
Add(i,T);
}
for(i=1;i<=n;i++)
for(j=1;j<i;j++)
if( dis[i][j]<2*r )
Add(i,j),Add(j,i);
return !BFS();
}
double Bisection()
{
double l=0,r=min(pos.x-1,pos.y-1);
while(r-l>1e-4)
{
double mid=(l+r)/2.0;
if( Judge(mid) )
l=mid;
else
r=mid;
}
return (l+r)/2.0;
}
int main()
{
int i,j;
cin>>n>>pos;
for(i=1;i<=n;i++)
cin>>points[i];
for(i=1;i<=n;i++)
for(j=1;j<i;j++)
dis[i][j]=Distance(points[i],points[j]);
printf("%.2lf\n", Bisection() );
}

BZOJ 3007 解救小云公主 二分答案+对偶图的更多相关文章

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

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

  2. bzoj3007 解救小云公主

    3007: 解救小云公主 Time Limit: 5 Sec  Memory Limit: 512 MB Submit: 159  Solved: 71 [id=3007" style=&q ...

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

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

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

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

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

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

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

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

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

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

  8. bzoj3007: 拯救小云公主

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

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

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

随机推荐

  1. 判断IE浏览器的类型以及提示信息(低版本浏览器不予显示)

    //浏览器IE版本判断(function(window) {    var theUA = window.navigator.userAgent.toLowerCase();    if ((theU ...

  2. 关于定位中left和right,top和bottom的权重问题

    关于定位中left和right,top和bottom的权重问题 在共同类中设置了定位并且设置了left等定位,如果你引用这个类并加入其他的类中也有left和right等定位,那么你设置的right或是 ...

  3. 02使用常规步骤编译NanoPiM1Plus的Android4.4.2

    02使用常规步骤编译NanoPiM1Plus的Android4.4.2 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/5 17:51 版本 ...

  4. quartz在集群环境下的最终解决方案

    在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 quartz 协调处理自动化 JOB . 大家想象一下,现在有 A , B , C3 台机器同时作为集群服务器对外统一提供 SERVI ...

  5. caffe2:conda路径和权限问题

    在使用conda之后,总是不能直接使用 conda install 命令,需要把codna添加到系统路径,取代默认Python. 在-/.bashrc中,添加 # added by Anaconda2 ...

  6. swift VS NSObject

    Any class that does not inherit from another class is known as a base class. Swift classes do not in ...

  7. vivo手机执行input命令提示killed

    异常现象: 使用vivo手机时发现通过inputManager发送按键.执行屏幕滑动等动作失效,相关API并没有任何异常抛出,继续跟踪发现shell控制台执行input进行屏幕滑动.发送文本.模拟按键 ...

  8. Android 7.0系统代码调用安装apk时报错FileUriExposedException完美解决

    项目更新遇到问题   Android项目开发中经常遇到下载更新的需求,以前调用系统安装器执行安装操作代码如下: Intent intent = new Intent(); intent.setActi ...

  9. 16监听器、Filter、Nginx、Spring、AOP

    16监听器.Filter.Nginx.Spring.AOP-2018/07/30 1.监听器 监听web对象创建与销毁的监听器 ServletContextListener HttpSessionLi ...

  10. idea+maven配置log4j详解

    经过上一篇的讲解,知道了实现log4j打印日志依赖的jar包共3个,在pom.xml中加入相关依赖: <!-- 添加log4j日志相关jar包:共3个jar--> <!-- http ...