1343:【例4-2】牛的旅行

news2024/11/15 11:31:12

1343:【例4-2】牛的旅行
时间限制: 1000 ms         内存限制: 65536 KB
【题目描述】
农民John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称为一个牧场。但是就目前而言,你能看到至少有两个牧区不连通。现在,John想在农场里添加一条路径 ( 注意,恰好一条 )。对这条路径有这样的限制:一个牧场的直径就是牧场中最远的两个牧区的距离 ( 本题中所提到的所有距离指的都是最短的距离 )。考虑如下的两个牧场,图1是有5个牧区的牧场,牧区用“*”表示,路径用直线表示。每一个牧区都有自己的坐标:


图1所示的牧场的直径大约是12.07106, 最远的两个牧区是A和E,它们之间的最短路径是A-B-E。
这两个牧场都在John的农场上。John将会在两个牧场中各选一个牧区,然后用一条路径连起来,使得连通后这个新的更大的牧场有最小的直径。注意,如果两条路径中途相交,我们不认为它们是连通的。只有两条路径在同一个牧区相交,我们才认为它们是连通的。
现在请你编程找出一条连接两个不同牧场的路径,使得连上这条路径后,这个更大的新牧场有最小的直径。
【输入】
第 1 行:一个整数N (1 <= N <= 150), 表示牧区数;
第 2 到 N+1 行:每行两个整数X,Y ( 0 <= X,Y<= 100000 ), 表示N个牧区的坐标。每个牧区的坐标都是不一样的。
第 N+2 行到第 2*N+1 行:每行包括N个数字 ( 0或1 ) 表示一个对称邻接矩阵。
例如,题目描述中的两个牧场的矩阵描述如下:

输入数据中至少包括两个不连通的牧区。
【输出】
只有一行,包括一个实数,表示所求答案。数字保留六位小数。
【输入样例】
8
10 10
15 10
20 10
15 15
20 15
30 15
25 10
30 10
01000000
10111000
01001000
01001000
01110000
00000010
00000101
00000010
【输出样例】
22.071068

试题分析:
1.用floyd求出任意两点间的距离,然后求出每个点到所有可达点的最大距离m[i]
则有:r1=max(m[i])
2.枚举任意不连通的两个点i,j,把它们连通起来,则得到新的直径m[i]+m[j]+(i,j)间的距离
则有:r2=max(m[i]+m[j]+dist[i][j])
3. ans=max(r1,r2)

#include <bits/stdc++.h>
using namespace std;
int zb[155][2];
double dist[155][155],m[155];
int n;
double dis(int x,int y){
	return sqrt((zb[x][0]-zb[y][0])*(zb[x][0]-zb[y][0])+(zb[x][1]-zb[y][1])*(zb[x][1]-zb[y][1]));
}
void Floyd(){//搜索路径
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				if((i!=j)&&(i!=k)&&(j!=k)&&(dist[i][k]<1e10)&&(dist[k][j]<1e10)&&(dist[i][j]>dist[i][k]+dist[k][j]))
					dist[i][j]=dist[i][k]+dist[k][j];
}
int main() {
    cin>>n;
    for(int i=1;i<=n;i++)cin>>zb[i][0]>>zb[i][1];
    char c;
    for(int i=1;i<=n;i++)
    	for(int j=1;j<=n;j++){
			cin>>c;
			if(c=='1') 
				dist[i][j]=dis(i,j);
			else dist[i][j]=1e10;
		}
	Floyd();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(dist[i][j]<1e10&&m[i]<dist[i][j]) m[i]=dist[i][j];
	double minx=1e20,t;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i!=j && dist[i][j]>(1e10-1)){
				t=dis(i,j);
				if(minx>m[i]+m[j]+t)minx=m[i]+m[j]+t;
			}
	for(int i=1;i<=n;i++) minx=max(minx,m[i]);
    printf("%.6lf",minx);
    return 0;
}

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

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

相关文章

【特殊的一年,过去了】再见2022,你好2023

现在是2022年12月30日&#xff0c;提前的新年快乐&#xff01; 各位阳过了吗&#xff1f;&#xff08; tips:最近新学会的打招呼方式:) &#xff09; 我已经阳康啦&#xff0c;所以本文是带有奥密克戎抗体的&#xff0c;各位不用担心~ – 2022可算是快接近尾声啦&#xff01;…

虹科案例|Vuzix辅助和增强现实技术的全球领导者

当今企业的新现实 Vuzix 大多数科技业内人士都认为&#xff0c;未来将是免提时代。总有一天&#xff0c;智能手机、平板电脑、台式电脑和笔记本电脑将被更直观的设备所取代。 然而&#xff0c;对于未来免提的条件&#xff0c;各方意见并不一致。未来的免提设备是将数字信息覆盖…

IntelliJ IDEA 详细使用教程 – 主题,字体,类和方法注释设置

IDEA是Java开发者最喜爱的开发工具之一&#xff0c;高端大气&#xff0c;智能化&#xff0c;个性化&#xff0c;每个开发者都喜欢设置自己喜欢的主题&#xff0c;字体&#xff0c;打造一个属于自己的IDE&#xff0c;本次介绍在IDEA中&#xff0c;如何设置主题&#xff0c;字体等…

聊聊AQS

Java中 AQS 是 AbstractQueuedSynchronizer 类&#xff0c;AQS 依赖 FIFO 队列来提供一个框架&#xff0c;这个框架用于实现锁以及锁相关的同步器&#xff0c;比如信号量、事件等。 在 AQS 中&#xff0c;主要有两部分功能&#xff0c;一部分是操作 state 变量&#xff0c;第二…

调用html5播放器时,出现播放器按钮太小的问题

用手机浏览器打开视频&#xff0c;有时会出现播放器按钮太小的情况&#xff0c;此时只需在<head>中加入下面这段viewport代码即可解决&#xff1a; <meta name"viewport" content"widthdevice-width, initial-scale1, maximum-scale1,minimum-scale1…

Docker下Mysql应用部署

目录 环境搭建 进入mysql 外部连接mysql 外部插入数据 查询容器数据 环境搭建 docker pull mysqlmkdir /root/mysql cd /root/mysqldocker run -id \ -p 3307:3306 \ --name my_sql \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -v $PWD/conf:/etc/mysql/conf…

【开源项目】任务调度框架PowerJob介绍及源码解析

项目介绍 PowerJob&#xff08;原OhMyScheduler&#xff09;是全新一代分布式调度与计算框架&#xff0c;能让您轻松完成作业的调度与繁杂任务的分布式计算。 项目地址 源码&#xff1a;https://gitee.com/KFCFans/PowerJob官网&#xff1a;http://www.powerjob.tech/index…

前端期末考试试题及参考答案(01)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 一、 填空题 ______表示页面中一个内容区块或整个页面的标题。______表示页面中一块与上下文不相关的独立内容&#xff0c;比如一篇文章。CSS的引入方式有3种&#xff0c;分…

Python数据分析案例15——超市零售购物篮关联分析(apriori)

啤酒和纸尿裤的故事大多数人都听说过&#xff0c;纸尿裤的售卖提升了啤酒的销售额。 关联分析就是这样的作用&#xff0c;可以研究某种商品的售卖对另外的商品的销售起促进还是抑制的作用。 案例背景 本次案例背景是超市的零售数据&#xff0c;研究商品之间的关联规则。使用的…

移植SFUD,驱动SPI FLASH ZD25WQ80

1、关于SFUD SFUD (Serial Flash Universal Driver) 串行 Flash 通用驱动库&#xff0c;支持众多spi flash&#xff0c;关于SFUD的详细资料可参考&#xff1a;https://github.com/armink/SFUD。 2、为什么会有通用驱动 JEDEC &#xff08;固态技术协会&#xff09;针对串行 …

Python的22个万用公式,你确定不看看吗

前言 在大家的日常python程序的编写过程中&#xff0c;都会有自己解决某个问题的解决办法&#xff0c;或者是在程序的调试过程中&#xff0c;用来帮助调试的程序公式。 小编通过几十万行代码的总结处理&#xff0c;总结出了22个python万用公式&#xff0c;可以帮助大家解决在…

TypeScript中type和interface区别

typescript中interface介绍&#xff1a;TypeScript 中的接口 interface_疆~的博客-CSDN博客通常使用接口&#xff08;Interface&#xff09;来定义对象的类型。https://blog.csdn.net/qq_40323256/article/details/128478749 type type关键字是声明类型别名的关键字。用来给一…

windows 编译C++ boost库(超详细)

系列文章目录 文章目录系列文章目录前言一、windows二、b2.exe 参数前言 boost库其实不进行编译&#xff0c;大部分库也是可以正常使用的 而且也有一个开源工具vcpkg可以帮组我们下载编译&#xff0c;只是在国内用起来比较麻烦&#xff0c;而且还时常出bug 所以这里详细记录…

mac下,使用 docker 搭建,单机机器集群

背景&#xff1a; 在 Mac本下&#xff0c;通过 docker 完成一个 es 集群&#xff08;3台-或许可多台&#xff09;搭建。&#xff08;后续如果有真实的机器&#xff0c;只需要又该对应的 ip 地址即可&#xff0c;需要关注的是&#xff0c;机器间是可以互相 ping通的&#xff0c;…

4.3.5、IPv4 地址的应用规划

给定一个 IPv4 地址块&#xff0c;如何将其划分成几个更小的地址块&#xff0c;并将这些地址快分配给互联网中的不同网络&#xff0c; 进而可以给各网络中的主机和路由器接口分配 IPv4 地址。 一般有两种方法&#xff1a; 定长的子网掩码 FLSM &#xff08;Fixed Length Sub…

线程,进程以及Java中创建线程的多种方式

1. 前言 今天的这篇文章的目的还是为了讲述下什么叫线程&#xff0c;什么是进程。可能之前很多人都是通过背书得来的&#xff0c;今天就从通俗易懂的角度来分析下 2. 适合人群 线程以及进程的初学者 3. 开始 3.1 什么是程序 其实不管是程序/ 进程/ 线程都是基于操作系统而言…

141.环形链表

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;…

SuperMap iDesktop地质体模型匹配地形——精修地质体模型路线

作者&#xff1a;超图研究院技术支持中心-于丁 地质体模型匹配地形——精修地质体模型路线 相信大家开展地质体业务时&#xff0c;常常会遇到构建的精模地质体与DEM地形数据的交界面&#xff0c;嵌合效果不佳、相互压盖、渲染冲突不稳定&#xff08;闪面&#xff09;、掩盖、漂…

前端期末考试试题及参考答案(03)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 一、 填空题 transition属性中______规定应用过渡的CSS属性的名称。transition属性中______定义过渡效果花费的时间。transition属性中______属性规定过渡效果的时间曲线。…

GitHub入门指南(上)

前言 我去年入门 GitHub&#xff0c;一开始不知道从哪开始学&#xff0c;在网上查找了很多文章、教程学习。这篇文章就是以我刚学习时的小白视角写的&#xff0c;希望能帮助到想开始学习 GitHub 又不知如何上手的学习者。因为我也是初级水平&#xff0c;文中介绍的知识基于我自…