noip模拟赛 radius

分析:这道题实在是不好想,一个可以骗分的想法是假定要求的那个点在中心点上,可以骗得不少分.但是在边上的点要怎么确定呢?理论复杂度O(﹢无穷).答案一定是和端点有关的,涉及到最大值最小,考虑二分最大值,关键就是怎么check.如果有一条边x,还有一个点y,把y到x上的点的距离>mid的点给标记上,这样就会形成许多个区间,判断一下x是否被这些区间给完全覆盖住了,如果没有被完全覆盖住,证明这个最大值可以更小.思路非常奇妙,具体实现细节可以参看代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int maxn = 210, maxm = 40010;int n, m, a[maxn][maxn], head[maxn], to[maxm],ans,len,top,nextt[maxm],w[maxm], tot = 1;
struct node
{int x, y, z;
}e[20000];struct node2
{int first, second;
}e2[20000];void add(int x, int y, int z)
{w[tot] = z;to[tot] = y;nextt[tot] = head[x];head[x] = tot++;
}void floyd()
{for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)if (a[i][j] > a[i][k] + a[k][j])a[i][j] = a[i][k] + a[k][j];
}void add2(int x, int y)
{e2[++top].first = x;e2[top].second = y;
}bool cmp(node2 a, node2 b)
{if (a.first == b.first)return a.second < b.second;return a.first < b.first;
}bool can()
{int x = 0;sort(e2 + 1, e2 + 1 + top,cmp); for (int i = 1; i <= top; i++){if (x < e2[i].first)return false;if (x > e2[i].second)continue;x = e2[i].second + 1;}if (x > len)return true;return false;
}bool check(int p)
{bool flag = false;for (int i = 1; i <= m; i++){top = 0;len = e[i].z;for (int j = 1; j <= n; j++){int x = p - a[e[i].x][j];int y = p - a[e[i].y][j];if (x < 0 && y < 0){add2(0, e[i].z);break;}if (x >= e[i].z || y >= e[i].z)continue;if (x + y >= e[i].z)continue;add2(max(0, x + 1), min(e[i].z, e[i].z - y - 1));}if (!can())flag = 1;if (flag)break;}if (flag)return true;return false;
}int main()
{memset(a, 127 / 3, sizeof(a)); scanf("%d%d", &n, &m);for (int i = 1; i <= m; i++){int u, v, z;scanf("%d%d%d", &u, &v, &z);z *= 2;add(u, v, z);add(v, u, z);e[i].x = u;e[i].y = v;e[i].z = z;a[u][v] = a[v][u] = min(a[u][v], z);}for (int i = 1; i <= n; i++)a[i][i] = 0;floyd();int l = 0, r = 10000010;while (l <= r){int mid = (l + r) >> 1;if (check(mid)){ans = mid;r = mid - 1;}elsel = mid + 1;}double temp = ans / 2.0;printf("%.2lf\n", temp);
return 0;
}

 

转载于:https://www.cnblogs.com/zbtrs/p/7726133.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中int的取值范围_c语言入门(1)

c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语言是进入编程世…

vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。

vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c; 然后再试一次。 报错原因&#xff1a; 没有安装脚手架vue-cli 解决方法&#xff1a;安装脚手架vue-cli npm inst…

session的生命周期

session的生命周期分为创建、活动、销毁三个阶段 创建一个新的会话不代表旧的会话就销毁了 session.invalidate()方法可以销毁当前会话 在page1中写上这个方法再打开网页 说明该会话被销毁了出现了错误 我们把这个方法写在所有代码段的下面 再打开这个网页 刷新网页 这个sessio…

虚拟化与网络

本文转自Grodd51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/juispan/1959791&#xff0c;如需转载请自行联系原作者

算法基础之搜索和经典排序

目录 简介 搜索算法 二分法查找 排序算法 冒泡排序&#xff08;Bubble Sort&#xff09; 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insert Sort&#xff09; 快速排序&#xff08;Quick Sort&#xff09; 归并排序&#xff08;Merge Sort…

背景宽高随文本变化_中科大提出ContourNet:更准确的任意形状场景文本检测新方法...

点击上方“CVer”&#xff0c;选择加"星标"置顶重磅干货&#xff0c;第一时间送达本文转载自&#xff1a;CSIG文档图像分析与识别专委会本文简要介绍2020年被CVPR录用的论文“ContourNet: Taking a Further Step toward Accurate Arbitrary-shaped Scene Text Detect…

算法面试题汇总(更新中)

1、根据数字返回相应位置数字 def get_digit(num, i):# i0 个位 1 十位 2 百位...return num // (10 ** i) % 10# print(get_digit(12345, 6)) 2、列表反转&#xff0c;不用内置函数 def reverse_list(li):n len(li)for i in range(n // 2):li[i], li[n-i-1] li[n-i-1], …

使用Jmeter对mysql进行性能测试入门

使用Jmeter对mysql进行性能测试入门 第一步&#xff1a;测试环境准备&#xff1a; 1&#xff09;、mysql> select version(); ----------- | version() | ----------- | 5.5.13 | ----------- ms数据库数据&#xff1a; mysql> select count(*) from account; ----------…

算法基础之数据结构

whats the 数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说&#xff0c;数据结构就是设计数据以何种方式组织并存储在计算机中。 比如&#xff1a;列表、集合与字典等都是一种数据结构。 通常情况下&#xff…

soap接口怎么不返回tuple python_Python 中的接口

Python 是动态类型语言, 只在运行时做 Duck Typing 检查.利: 灵活, 方便弊: 代码混乱, 缺少规范标准自带两类接口支持: abc 和 typing.Protocol, 有他们协助给天马行空的程序员套上枷锁, Python 的大工程才可以"上道"abcabc 就是 Abstract Base Class, 虚基类. 跟 Ja…

java 第11次作业:你能看懂就说明你理解了——this关键字

this 代表当前对象 转载于:https://www.cnblogs.com/qingyundian/p/7736699.html

c#多线程操作界面控件的简单实现

一个小功能&#xff0c;早有人实现了。自己在一个项目中用到&#xff0c;觉得有必要记录一下&#xff0c;写下来。代码 从上面你可能已经看出如何多线程操作同一个控件的&#xff0c;就是通过一个委托&#xff0c;然后定义委托方法&#xff0c;判断控件的InvokeRequired属性&am…

ssh 免密_Linux下配置SSH免密通信 “sshkeygen”的基本用法

利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序&#xff0c;后来又迅速扩展到其他操作平台。1 什么是SSH引用百度百科的说明:SSH 为 Secure Shell的缩写&#xff0c;由 IETF 的网络小组(Network Working Group)所制定&#xff1b;它是…

Python 第三方模块之 NumPy - 科学计算

NumPy 简介 NumPy 发展历史 1995年 Jim HugUNin开发了Numeric。随后&#xff0c;Numarray包诞生。Travis Oliphants整合Numeric和Numarray&#xff0c;开发Numpy&#xff0c;于2006年发布第一个版本。Numpy&#xff08;Numeric Python&#xff09;提供了许多高级的数值编程工…

Python 第三方模块之 matplotlib - 绘图库

简介 matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。MATLAB语言是面向过程的。利用函数的调用&#xff0c;MATLAB中可以轻松的利用一行命令来绘制直线&#xff0c;然后再用一系列的函数调整结果。 matplotlib有一套完全仿照MATLAB的函数形式…

微软P2V工具之Disk2VHD

虚拟化经过最近几年的发展&#xff0c;已经有很多的应用和服务迁移到了虚拟化的平台上了。在实施虚拟化的过程中就会涉及到将原来老旧的服务器来迁移到虚拟化平台的运行&#xff0c;这就是P2V&#xff0c;物理机转换为虚拟机。谈到P2V大家会想到很多的工具&#xff0c;例如Vmwa…

生成n套数位加减乘除_leetcode 算法汇总(四)位运算

一、 运算符& 与运算&#xff1a; 两个位都是 1 时&#xff0c;结果才为 1&#xff0c;否则为 0| 或运算&#xff1a; 两个位都是 0 时&#xff0c;结果才为 0&#xff0c;否则为 1^ 异或运算&#xff1a; 两个位相同则为 0&#xff0c;不同则为 1~ 取反运算&#xff1a;0 …

机器学习算法之 K-means、层次聚类,谱聚类

k-means 和层次聚类都属于划分聚类&#xff0c;实际中最常用的是k-means&#xff0c;k-means效果不好的情况下才会采用其他聚类 K-means算法 K-means算法&#xff0c;也称为K-平均或者K-均值&#xff0c;是一种使用广泛的最基础的聚类算法 假设输入样本为TX1,X2,…,Xm;则算法…

mapper注解的主要作用_Mybatis中mapper的xml解析详解

上一篇文章分析了mapper注解关键类MapperAnnotationBuilder&#xff0c;今天来看mapper的项目了解析关键类XMLMapperBuilder。基础介绍回顾下之前是在分析configuration的初始化过程&#xff0c;已经进行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

机器学习之梯度下降法(GD)和坐标轴下降法(CD)

梯度下降法 梯度下降法&#xff08;Gradient Descent, GD&#xff09;常用于求解无约束情况下凸函数&#xff08;Convex Function&#xff09;的极小值&#xff0c;是一种迭代类型的算法&#xff0c;因为凸函数只有一个极值点&#xff0c;故求解出来的极小值点就是函数的最小值…