传送门

因为答案满足单调性,所以看到这个题,第一反应是二分,但是总是WA,也没有超时。

看了题解,,,,,,

这题刚开始很多人会想到二分,二分答案,然后看看是否能绕过所有信号塔,但是,这样写明显超时,对于任何一个点,要找到离它最近的信号塔需要O(n)的时间,再乘上M*L(L=海滩的长度)不超时才怪呢。

这一题的本质就是封锁海滩,即用信号塔的工作范围将两边的边界连在一起。所以,这题就是求一条从第0列到第n列的最短路径,用点与边界的距离作为权值,点与点之间的距离的二分之一作为权值,构图完成后,用Dijkstra算法求最短路就可以了。当然用Kruskal算法并查集结构依次加最小边,直到两条边界被连在一起也是可以的。但是要注意最短路的长度是路径上边权的最大值,而不是边权之和

#include <cmath>
#include <cstdio>
#include <algorithm>
#define N 1000001 int f[N];
int n, m, cnt;
double X[N], Y[N]; struct node
{
int x, y;
double z;
node(int x = 0, int y = 0, double z = 0) : x(x), y(y), z(z) {}
}p[N]; inline double D(int i, int j)
{
return sqrt((X[i] - X[j]) * (X[i] - X[j]) + (Y[i] - Y[j]) * (Y[i] - Y[j]));
} inline bool cmp(node x, node y)
{
return x.z < y.z;
} inline int find(int x)
{
return x == f[x] ? x : f[x] = find(f[x]);
} int main()
{
int i, j, x, y;
scanf("%d %d", &n, &m);
for(i = 1; i <= m; i++) scanf("%lf %lf", &X[i], &Y[i]);
for(i = 1; i <= m; i++)
for(j = i + 1; j <= m; j++)
p[++cnt] = node(i, j, D(i, j) / 2);
for(i = 1; i <= m; i++)
{
p[++cnt] = node(0, i, X[i]);
p[++cnt] = node(i, m + 1, n - X[i]);
}
std::sort(p + 1, p + cnt + 1, cmp);
for(i = 0; i <= m + 1; i++) f[i] = i;
for(i = 1; i <= cnt; i++)
{
x = find(p[i].x);
y = find(p[i].y);
f[x] = y;
if(find(0) == find(m + 1))
{
printf("%.2lf\n", p[i].z);
return 0;
}
}
}

  

最新文章

  1. SpringMVC保存数据到mysql乱码问题
  2. C#实现的等额本息法、按月付息到期还本法、一次性还本付息法
  3. 洛谷P1082 同余方程
  4. PHP学习笔记02——简易计算器
  5. ListView优化-getView优化
  6. [PeterDLax著泛函分析习题参考解答]第1章 线性空间
  7. Android 增量更新
  8. 解决 SQL 注入的另类方法
  9. linux 日常中会用到的命令(持续更新)
  10. Innodb中MySQL如何快速删除2T的大表
  11. Qt发起Http/Https请求
  12. springboot整合freemarker
  13. Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用
  14. 利用CA私钥和证书创建中间CA
  15. Yii2之控制台命令篇(console)
  16. 非旋转Treap
  17. 在请求的参数中设置可选值列表为当前职责可访问的所有OU
  18. [转]VS2010 常用插件
  19. 在MarkDown中插入数学公式对照表(持续更新)
  20. 001-Servlet模板

热门文章

  1. Aappcloud 调到二级页面黑屏
  2. html到计时特效(直接代码)
  3. 关于java的Long 类型到js丢失精度的问题
  4. Spring Boot学到的内容
  5. 001.JS特效
  6. 基于socketserver实现的并发(tcp和udp)
  7. codeforces415D. Glad to see you!(交互)
  8. 洛谷P2765 魔术球问题(贪心 最大流)
  9. vue-devtools在google浏览器下安装扩展
  10. 《深入理解Java虚拟机》读书笔记