【BZOJ】3007 拯救小云公主 最短路径
题目传送门
题目大意:给定一个矩形和矩形内一些点,求一条左上角到右下角的路径,使所有点和矩形边界到这条路径的最小距离最大。
解法1:最小距离最大,想到二分,然后题目就转化成:矩形内有一些圆形障碍,问左上角是否能到达右下角。直接BFS判断即可。(话说这种图好像叫对偶图啊)
这种解法的优点就是比较好想,但是如果数据再大一点就会TLE了,BZOJ4219肯定是过不了的。
解法2:考虑两点间距离,如果要通过这两点,最小距离肯定为(xi−xj)2+(yi−yj)2−−−−−−−−−−−−−−−−−√\sqrt {(x_i-x_j)^2+(y_i-y_j)^2},那么是不是可以增加左上角的点和右下角的点,做最小生成树?当左上角和右下角联通时,当前边就是答案。
但是……很可惜,最小生成树的做法会TLE。
那么是不是我们把kruskal换成SPFA就好了呢?
事实证明,就是这么做。
附上AC代码:
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;typedef long long ll;
const int N=3010;
int n,l,r,x[N],y[N];
double map[N][N],dis[N];
bool b[N];
queue <int> que;inline void spfa(void){dis[0]=0,b[0]=1,que.push(0);while (!que.empty()){int p=que.front();que.pop(),b[p]=0;for (int i=0; i<=n+1; ++i)if (i!=p&&dis[i]>max(dis[p],map[p][i])){dis[i]=max(dis[p],map[p][i]);if (!b[i]) b[i]=1,que.push(i);}}return;
}int main(void){scanf("%d%d%d",&n,&l,&r);for (int i=1; i<=n; ++i) scanf("%d%d",&x[i],&y[i]);for (int i=1; i<=n-1; ++i)for (int j=i+1; j<=n; ++j)map[i][j]=map[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))/2;for (int i=1; i<=n; ++i) map[0][i]=map[i][0]=1.0*min(x[i]-1,r-y[i]),map[n+1][i]=map[i][n+1]=1.0*min(y[i]-1,l-x[i]);return memset(dis,100,sizeof dis),map[0][n+1]=map[n+1][0]=0x7fffffff,spfa(),printf("%.2f\n",dis[n+1]),0;
}
【BZOJ】3007 拯救小云公主 最短路径相关推荐
- bzoj 3007 拯救小云公主
http://www.elijahqi.win/archives/3705 Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门 ...
- BZOJ 3007: 拯救小云公主
Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...
- bzoj3007 拯救小云公主
3007: 拯救小云公主 Time Limit: 5 Sec Memory Limit: 512 MB Submit: 159 Solved: 71 [ Submit][ Status][ D ...
- P2498 [SDOI2012]拯救小云公主
P2498 [SDOI2012]拯救小云公主 题意: 一个row * line的矩形,英雄在左下角(1,1),公主在右上角(row,line),有n个位置是boss.英雄现在要去公主那里,但是要避开b ...
- 二分+并查集【bzoj3007】[SDOI2012]拯救小云公主
Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...
- [SDOI2012]拯救小云公主
题目 题目描述 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己 ...
- 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】
题目 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1 ...
- [SDOI2012]拯救小云公主【bfs+二分答案】
题目链接 正难则反. 要直接求从起点到终点的最大距离,不妨反过来求最小的可以阻止骑士从起点到终点的对于全体圆的最小半径. 那么,就是阻止从左上角到右下角的所有相交圆,于是,就是要变成没有从左上角到右下 ...
- [luogu] P2498 [SDOI2012]拯救小云公主 二分答案+bfs
前言 以为二分的是人到BOOS的距离 没想到可以直接二分BOOS的攻击距离 传送门 : 思路 BFS待研究 CODE typedef pair<int,int> pii; map<i ...
最新文章
- centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)
- Linux运维宝典:最常用的150个命令汇总
- 使用元学习和推理改善您的模型!
- 【166期推荐】医院中电脑耗材采购该不该归信息科负责?
- ssm启动不报错_解决idea导入ssm项目启动tomcat报错404的问题
- mysql数据库怎么读文件_mysql数据库读写文件
- 10.2 广州集训 Day1
- dockerhub 拉取地址_使用docker,进行dockerhub仓库上传镜像,拉取镜像。
- 【水果识别】基于matlab GUI形态学水果识别【含Matlab源码 1364期】
- 文件打包下载 (ZipArchive)
- Verilog算法入门
- 硬件系列(一)----------WIFI打印机之使用socket进行打印机搜索
- 数据分析--数据预处理
- php 汉字拼音字典排序,按拼音排序的小技巧
- 《国富论》阅读笔记03
- jupyterlab使用配置
- 怎么在视频上叠加字幕和Logo--技术实现2
- RXJAVA-FlatMap
- 2020个人网站搭建指南(华为云+wordpress)
- HDU 3687 National Day Parade(暴力)
热门文章
- 项目管理中的成本计算
- 王者荣耀:又一新皮肤登场,堪称惊艳 ,网友:三国‘天下无双’
- 用户主要通过计算机软件与计算机进行交流,大学计算机基础(2015版)蔡绍稷,吉根林习题三-答案讲述.doc...
- 【ubuntu16.04 LTS】ping百度通,但浏览器打不开百度网页
- uniapp 开发安卓App实现高德地图路线规划导航
- 成功解决tensorflow.python.framework.errors_impl.InvalidArgumentError报错问题
- 找朋友(斗地主)判断逻辑
- CAN通讯方式--秉火STM32学习笔记
- Java生成SSL证书
- 当蚂蚁“程序猿”还是“小猴子”的时候……