BZOJ 3007 解救小云公主 二分答案+对偶图
题目大意:给定一个矩形和矩形内的一些点。求一条左下角到右上角的路径。使全部点到这条路径的最小距离最大
最小距离最大。果断二分答案
如今问题转化成了给定矩形中的一些圆形障碍物求左下角和右上角是否连通
然后就是对偶图的问题了
左下角和右上角连通等价于对偶图中左上两条边和右下两条边不连通
因此将全部相交的圆之间连边,从左上两条边广搜就可以
时间复杂度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 解救小云公主 二分答案+对偶图的更多相关文章
- 【BZOJ3007】拯救小云公主 二分+几何+对偶图
[BZOJ3007]拯救小云公主 Description 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了 ...
- bzoj3007 解救小云公主
3007: 解救小云公主 Time Limit: 5 Sec Memory Limit: 512 MB Submit: 159 Solved: 71 [id=3007" style=&q ...
- BZOJ:4219: 跑得比谁都快 3007: 拯救小云公主
4219: 跑得比谁都快 3007: 拯救小云公主 三角剖分的解释可以看这里:http://www.cnblogs.com/Enceladus/p/6706444.html 后一道是前一道的弱化版. ...
- 【bzoj3007】拯救小云公主 二分+对偶图+并查集
题目描述 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等 ...
- 【BZOJ】【3007】拯救小云公主
思路题 我的naive的做法是二分答案+判定是否有路径可走……但是没有正确理解[走的方向任意]这句话…… 其实就是说想咋走咋走= =360°无死角乱走…… 所以其实是个平面上的问题…… 我们可以换个方 ...
- 二分+并查集【bzoj3007】[SDOI2012]拯救小云公主
Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...
- 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】
题目 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1 ...
- bzoj3007: 拯救小云公主
Description 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是 ...
- 洛谷 P2498 [SDOI2012]拯救小云公主 解题报告
P2498 [SDOI2012]拯救小云公主 题目描述 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到\(boss\)的洞穴门口,他一下子就懵了,因为面前不只是一 ...
随机推荐
- 2105. [NOIP2015] 信息传递
★☆ 输入文件:2015message.in 输出文件:2015message.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 有n个同学(编号为1到n)正在 ...
- Spark学习之基础相关组件(1)
Spark学习之基础相关组件(1) 1. Spark是一个用来实现快速而通用的集群计算的平台. 2. Spark的一个主要特点是能够在内存中进行计算,因而更快. 3. RDD(resilient di ...
- (求助)对某一颜色,设置透明度 alpha 后,其他使用该颜色的地方 受到影响!!!!原因未知
对某一颜色,设置透明度 alpha 后,其他使用该颜色的地方 受到影响!!!!原因未知,有谁碰到过这样的问题?????? 测试了以下三款手机,结果如下: 1.android 4.4.2: 不受影响 2 ...
- <a>标签的href、onclick属性
链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接): 参考:https://www.cnblogs.com/happykakeru/ar ...
- java 8 stream使用
使用stream代替循环的方案 1.定义一个Article类包括标题.作者.标签 private class Article { private final String title; private ...
- PHP——基本使用(二)
PHP与Apache Apache服务器在接受到客户端请求的时候,根据客户端所请求的文件的类型,然后去问模块能否处理此文件,php作为模块之一有可能可以处理此文件,处理之后将数据再返回给apache, ...
- 常用css属性总结
边框修饰:border------>top,bottom,left,right上下左右边框 分为:color,类型style{ groove,dashed,ridge,solid}一个值---- ...
- Windows提高_2.1第一部分:线程
第一部分:线程 什么是线程? 线程其实可以理解为一段正在执行中的代码,它最少由一个线程内核对象和一个栈组成. 线程之间是没有从属关系的,同一进程下的所有线程都可以访问进程内的所有内容. 主线程其实是创 ...
- js统计图表插件 Echarts
Echarts 用于制作数据统计图表,一个纯 Javascript 的图表库,快捷简便的生成统计图表. 官网:https://www.echartsjs.com/ 效果 html <!DOCTY ...
- impdp and docker install oracleXE
docker oracle https://hub.docker.com/r/sath89/oracle-xe-11g/ docker run -d -p 8080:8080 -p 1521:1521 ...