【BZOJ3007】拯救小云公主 二分+几何+对偶图
【BZOJ3007】拯救小云公主
Description
Input
Output
Sample Input
2 2
输出样例1:
1.00
输入样例2:
1 3 3
3 1
输出样例2:
2.00
Sample Output
HINT
100%数据,n<=3000;
题解:离所有boss的最远距离为x可以转化为将所有boss看成半径为x的圆,且存在一条从左下角走到右上角的路径与所有圆不相交,即左下角和右上角在一个域中。这个距离显然是可以二分的。并且,左下角和右下角在一个域中等价于在对偶图中,左上角和右上角不连通。于是用并查集判断即可。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
const int maxn=3010;
int n;
int f[maxn];
double mx,my;
double x[maxn],y[maxn];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
double dis2(int a,int b)
{
return (x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]);
}
int find(int x)
{
return (f[x]==x)?x:(f[x]=find(f[x]));
}
void uni(int a,int b)
{
if(find(a)!=find(b)) f[f[a]]=f[b];
}
bool check(double r)
{
int i,j;
for(i=1;i<=n+2;i++) f[i]=i;
for(i=1;i<=n;i++)
{
if(x[i]-r<=1||y[i]+r>=my) uni(i,n+1);
if(x[i]+r>=mx||y[i]-r<=1) uni(i,n+2);
}
for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(dis2(i,j)<=4*r*r) uni(i,j);
return find(n+1)!=find(n+2);
}
int main()
{
n=rd(),mx=rd(),my=rd();
int i;
for(i=1;i<=n;i++) x[i]=rd(),y[i]=rd();
double l=0,r=mx+my,mid;
while(r-l>1e-4)
{
mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid;
}
printf("%.2lf",l);
return 0;
}
【BZOJ3007】拯救小云公主 二分+几何+对偶图的更多相关文章
- 【bzoj3007】拯救小云公主 二分+对偶图+并查集
题目描述 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等 ...
- bzoj3007: 拯救小云公主
Description 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是 ...
- bzoj3007: 拯救小云公主(二分+并查集)
挺水的题...好多题解说是对偶图,其实感觉不能算严格意义上的对偶图吧QAQ 先二分答案r,然后以boss为中心半径为r的圆不能走,求能否从左下走到右上. 不能从左下走到右上,说明这堆圆把图隔开了,于是 ...
- BZOJ 3007 解救小云公主 二分答案+对偶图
题目大意:给定一个矩形和矩形内的一些点.求一条左下角到右上角的路径.使全部点到这条路径的最小距离最大 最小距离最大.果断二分答案 如今问题转化成了给定矩形中的一些圆形障碍物求左下角和右上角是否连通 然 ...
- BZOJ:4219: 跑得比谁都快 3007: 拯救小云公主
4219: 跑得比谁都快 3007: 拯救小云公主 三角剖分的解释可以看这里:http://www.cnblogs.com/Enceladus/p/6706444.html 后一道是前一道的弱化版. ...
- 【BZOJ】【3007】拯救小云公主
思路题 我的naive的做法是二分答案+判定是否有路径可走……但是没有正确理解[走的方向任意]这句话…… 其实就是说想咋走咋走= =360°无死角乱走…… 所以其实是个平面上的问题…… 我们可以换个方 ...
- 洛谷 P2498 [SDOI2012]拯救小云公主 解题报告
P2498 [SDOI2012]拯救小云公主 题目描述 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到\(boss\)的洞穴门口,他一下子就懵了,因为面前不只是一 ...
- 二分+并查集【bzoj3007】[SDOI2012]拯救小云公主
Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...
- 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】
题目 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1 ...
随机推荐
- APUE 学习笔记(十) 高级I/O
1. Unix IPC(InterProcess Communication) 同一主机的各个进程间的IPC:管道.FIFO.消息队列.信号量.共享存储器 不同主机上的各个进程间IPC:socket套 ...
- ZOJ 2619: Generator
类型:概率 + 解方程组(高斯消元法) + KMP(好吧其实我用的是暴力~)题意:你可以等概率的选择大写字母里的前n个字母,在纸上写啊写,一直到出现给定的字符串.问写的字母个数的期望.思路: 期望递推 ...
- LeetCode OJ-- Reverse Integer
https://oj.leetcode.com/problems/reverse-integer/ 一个整数,给反过来,比如123输出321.注意12300的情况,应该输出321,还有-123,是-3 ...
- LeetCode OJ——Plus One
http://oj.leetcode.com/problems/plus-one/ 进位加法 #include <iostream> #include <vector> usi ...
- Android调起地图导航
想要使用导航功能可以使用各个地图的开放平台集成导航模块,如果不想集成也可以调起相关app导航 调起其他app首先得使用到该app包名,先贴出来 public final static Strin ...
- Python基础数据类型补充及深浅拷贝
本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷贝主要内容:一. 基础数据类型补充首先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的自己看一看就可以了.我们补充给一 ...
- codevs——2548 自然数积分解
2548 自然数积分解 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 把自然数N分解为若干个自然数之积,输出 ...
- MX
A mail exchanger record (MX record) is a type of resource record in the Domain Name System that spec ...
- error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools":解决方案
我是在安装scrapy时遇到这个问题的,安装其他组件也可能会遇到.但问题解决办法都是大致相同的. 以安装scrapy为例: 在pycharm中安装twisted时出现: error: Microsof ...
- Spring实战Day3
通过XML创建装配bean 1.装配不存在成员变量的bean <bean id="talent" class="cn.jqzhong.Spring.study.da ...