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\)的洞穴门口,他一下子就懵了,因为面前不只是一 ...
随机推荐
- SQL Server的安装笔记
SQL安装笔记 安装SQL Server 2008 打开SQL Server 2008中的setup.exe,显示SQL安装程序的对话框. 提示必须安装相关组件Microsoft.NET Framew ...
- dapper未将对象引用设置到对象的实例
现象是这样的dapper在reader.Read<T>()方法时报:未将对象引用设置到对象的实例 解决:实体类里属性类型与数据库表字段类型不匹配 我用的mysql varchar(50)保 ...
- HDU_3591_(多重背包+完全背包)
The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- codeforces_459D_(线段树,离散化,求逆序数)
链接:http://codeforces.com/problemset/problem/459/D D. Pashmak and Parmida's problem time limit per te ...
- 梦想CAD控件安卓选择集
在本示例中将使用构造选择集对被过滤对象进行过滤,该类封装了选择集及其处理函数,支持如下过滤条件. 参数类型 类型 RTDXF0 TEXT 文字 MTEXT 多行文字 CIRCLE 圆 ARC 圆弧 L ...
- 透彻分析C/C++中memset函数
在C语言中,经常需要对内存进行操作,里面涉及很多函数,但是memset函数的使用有一点需要大家格外注意,这也是我在做项目时遇到过的一个问题,调试了很久才找出来错误. 函数原型是:void *memse ...
- <MyBatis>入门三 sqlMapper文件
增加 1.增删改在接口中的返回值 Integer.Long.Boolean.void 返回影响多少行 或 true | false 2.mapper 中 增删改没有返回值 (resultType或re ...
- linux(Ubuntu16)下切换python2和python3(转)
采用update-alternatives 切换版本 1.打开终端:Ctrl+Alt+T 2.查看update-alternatives的帮助信息:update-alternatives --help ...
- PAT 1131 Subway Map
In the big cities, the subway systems always look so complex to the visitors. To give you some sense ...
- pace.js – 网页自动加载进度条插件
网站顶部的页面加载进度条是怎么实现的,页面的加载进度百分比,有时候获取是比较麻烦的,当然也可以利用一些优秀的JavaScript插件来实现,今天就为大家介绍这样子的一款插件:pace.js. [官方网 ...