【最短路】【图论】【Floyed】牛的旅行(ssl 1119/luogu 1522)

牛的旅行

ssl 1119

luogu 1522

题目大意

有两堆点,每一堆点之中的任何两个点都一定有相连的路线,连接两堆点中的各一个点,使最远的两个点的距离最短


原题

农民John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称为一个牧场。但是就目前而言,你能看到至少有两个牧区不连通。这样,农民John就有多个牧区了。

John想在农场里添加一条路径(注意,恰好一条)。对这条路径有以下限制:

一个牧场的直径就是牧场中最远的两个牧区的距离(本题中所提到的所有距离指的都是最短的距离)。考虑如下的有5个牧区的牧场,牧区用星号表示,路径用直线表示。每一个牧区都有自己的坐标:

在这里插入图片描述

这个牧场的直径大约是12.07106,最远的两个牧区是A和E,它们之间的最短路径是A-B-E。

这里是另一个牧场:

在这里插入图片描述

这两个牧场都在John的农场上。John将会在两个牧场中各选一个牧区,然后用一条路径连起来,使得连通后这个新的更大的牧场有最小的直径。

注意,如果两条路径中途相交,我们不认为它们是连通的。只有两条路径在同一个牧区相交,我们才认为它们是连通的。

输入文件包括牧区、它们各自的坐标,还有一个如下的对称邻接矩阵:

A B C D E F G H

A 0 1 0 0 0 0 0 0

B 1 0 1 1 1 0 0 0

C 0 1 0 0 1 0 0 0

D 0 1 0 0 1 0 0 0

E 0 1 1 1 0 0 0 0

F 0 0 0 0 0 0 1 0

G 0 0 0 0 0 1 0 1

H 0 0 0 0 0 0 1 0

输入文件至少包括两个不连通的牧区。

请编程找出一条连接两个不同牧场的路径,使得连上这条路径后,这个更大的新牧场有最小的直径。

Input

第1行: 一个整数N (1 <= N <= 150), 表示牧区数

第2到N+1行: 每行两个整数X,Y (0 <= X ,Y<= 100000), 表示N个牧区的坐标。注意每个 牧区的坐标都是不一样的。

第N+2行到第2*N+1行: 每行包括N个数字(0或1) 表示如上文描述的对称邻接矩阵。

Output

只有一行,包括一个实数,表示所求答案。数字保留六位小数。

Sample Input

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

Sample Output

22.071068

解题方法:

先求出两个区块的最短路,再求出每个区块中每个点与相距此点最大的点的距离,枚举两边的所有点,将任意两个点(不同区域)连接后的的结果就是两个点的距离加上两个点在本区域的相差最大的距离(若不懂,看代码)

注意:

当出现下图时(推荐按住左键再移动来放大图片),要连接3和4,但最大长度不是1-3-4或2-3-4,而是1-2,所以要注意

在这里插入图片描述

#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
int n;
double f[152][152],b[152],jl[152][152],ans,g,sum;
char t;
struct rec
{int x,y;
}a[152];
int main()
{scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d %d",&a[i].x,&a[i].y);memset(f,0x7f,sizeof(f));//初值memset(jl,0x7f,sizeof(jl));g=f[0][0];//记录最大值for (int i=1;i<=n;i++){getchar();//换行for (int j=1;j<=n;j++){t=getchar();//输入jl[i][j]=sqrt(double((a[i].x-a[j].x)*(a[i].x-a[j].x))+double((a[i].y-a[j].y)*(a[i].y-a[j].y)));//用勾股定理求距离if (t=='1') f[i][j]=jl[i][j];//f用来求最短路}}for (int k=1;k<=n;k++)for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)if ((i!=j)&&(j!=k)&&(k!=i)&&(f[i][k]+f[k][j]<f[i][j]))f[i][j]=min(f[i][k]+f[k][j],f[i][j]);//求最短路for (int i=1;i<=n;i++){for (int j=1;j<=n;j++)if (f[i][j]!=g)b[i]=max(f[i][j],b[i]);//求距离最长的sum=max(sum,b[i]);//记录}ans=g;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)if ((f[i][j]==g)&&(i!=j))//要不同区ans=min(ans,b[i]+b[j]+jl[i][j]);//连接printf("%.6lf",max(ans,sum));//输出最大的return 0;
}

温馨提示:

在luogu中要用scanf("%s")来一行一行地输入字符数组

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

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

相关文章

codefoces 939E Maximize!好题

题解 若存在一个子集s满足答案的话&#xff0c;则该子集一定包含集合S的最大值。 反证法证明&#xff1a; 假设s集合中最大的元素为x&#xff0c;S集合中最大的元素为X。则如果把x换成X&#xff0c;最大值增加了X-x&#xff0c;而平均值增量一定不大于X-x。 这样的话&#xff0…

P2050-[NOI2012]美食节【费用流,动态连边】

正题 题目链接:https://www.luogu.com.cn/problem/P2050 题目大意 nnn个菜品mmm个厨师&#xff0c;第iii种菜需要pip_ipi​份&#xff0c;第iii个人做第jjj道菜需要时间ti,jt_{i,j}ti,j​&#xff0c;求最少等待时间和。 解题思路 这题和之前修车很像&#xff0c;数据变大了。…

用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识

什么是RESTREST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的.一个实现了REST这些规则的服务就叫做RESTful的服务.最早是由Roy Fielding提出的.RPC 风格/getUsers/getUser?id1/c…

【图论】【最短路】【Dijkstra】最小花费(ssl 2206/luogu 1576)

最小花费 ssl 2206 luogu 1576 题目大意&#xff1a; 有n个人&#xff0c;他们之间有m对人可以相互{\color{red}相互}相互转账&#xff0c;但要收一定的税&#xff0c;求第x个人转给第y个人至少要多少钱 Description 在n个人中&#xff0c;某些人的银行账号之间可以互相转…

codeforces 939C Convenient For Everybody 简直羞耻

题解 这是一道大水题&#xff0c;然而我卡了1个半小时都没做出来&#xff0c;就是因为我搞反了时区的概念&#xff0c;必须挂出来&#xff0c;警示自己&#xff01;&#xff01;&#xff01; 首先明确时区的概念&#xff0c;如果一区为1时的时候&#xff0c;i区的本地时间为i时…

P2824-[HEOI2016/TJOI2016]排序【线段树,二分】

正题 题目链接:https://www.luogu.com.cn/problem/P2824 题目大意 nnn个数&#xff0c;每次将一个区间正序或者倒序排序&#xff0c;求最后位置ppp的数。 解题思路 思路确实巧妙 二分答案&#xff0c;定义大于midmidmid的数为1&#xff0c;小于midmidmid的数为2&#xff0c;…

【快速幂】小明解密码 (jzoj 2146)

小明解密码 题目大意 让你计算n^m的个位&#xff08;有t组数据&#xff09; 样例输入 2 3 4 4 5 样例输出 1 4 数据范围限制 对于30&#xff05;的数据&#xff0c;1≤t≤20&#xff0c;1≤n,m≤8 对于100&#xff05;的数据&#xff0c;1≤t≤1000&#xff0c;1≤…

使用ML.NET预测纽约出租车费

有了上一篇《.NET Core玩转机器学习》打基础&#xff0c;这一次我们以纽约出租车费的预测做为新的场景案例&#xff0c;来体验一下回归模型。场景概述我们的目标是预测纽约的出租车费&#xff0c;乍一看似乎仅仅取决于行程的距离和时长&#xff0c;然而纽约的出租车供应商对其他…

codeforces 932D Tree 倍增法+二分搜索

题面叙述 题目给出两种操作&#xff1a; 操作1是将一个权重为W的点加到树的某个节点下。 操作2是询问一个从R开始的序列的最长可能长度。 其中这个序列要这样找&#xff1a;从R开始&#xff0c;沿着祖先方向往上找&#xff0c;凡是权重大于等于当前序列最后一个点的要被选上…

P4430-小猴打架【perfer序列】

正题 题目链接:https://www.luogu.com.cn/problem/P4430 题目大意 nnn个点&#xff0c;每次不同联通块之间连边直到成为一颗树&#xff0c;求连边方式 解题思路 根据perferperferperfer序列&#xff0c;可以将一颗无根树变为一个长度n−2n-2n−2的序列&#xff0c;所以数量是…

【DP】小明在边塞(jzoj 2147)

小明在边塞 题目大意&#xff1a; 小明在&#xff08;1,1&#xff09;&#xff0c;他要去到&#xff08;n,m&#xff09;&#xff0c;当此点为1时&#xff0c;他的体力值-1&#xff0c;当此点为2时&#xff0c;他的体力值1&#xff0c;他只会向下或向右走&#xff08;就是往终…

使用ML.NET实现情感分析[新手篇]

在发出《.NET Core玩转机器学习》和《使用ML.NET预测纽约出租车费》两文后&#xff0c;相信读者朋友们即使在不明就里的情况下&#xff0c;也能按照内容顺利跑完代码运行出结果&#xff0c;对使用.NET Core和ML.NET&#xff0c;以及机器学习的效果有了初步感知。得到这些体验后…

codeforces 932E Team Work 高等数学求导、dp

题解 这是一道纯粹的数学求导题目。 首先我们先写出要求的公式。 ans∑r1nCnrrkans \sum_{r1}^{n} C_n^{r}r^kans∑r1n​Cnr​rk 乍一看&#xff0c;雾草好吓人&#xff0c;但是学过高等数学且稍有常识的人&#xff08;不是我&#xff09;可以看出&#xff0c;这个可以由某个…

【背包】小明逛超市(jzoj 2148)

小明逛超市 题目大意&#xff1a; 有一个大小为n的背包&#xff0c;和m件物品&#xff0c;每件物品都有自己的价格和价值还有个数&#xff0c;当个数为0时则为无限件&#xff0c;为1实则为1件&#xff0c;求最大的价值 样例输入 4 5 5 3 0 5 3 1 4 4 0 2 3 0 3 2 1 样…

P4093-[HEOI2016/TJOI2016]序列【CDQ分治,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P4093 题目大意 nnn个数字&#xff0c;每次有一个数字可能和原序列不同&#xff0c;但最多只有一个不同。 求所有情况下都满足的最长不降子序列 解题思路 定义maximax_imaxi​表示位置iii的最大数&#xff0c;minimin_imini…

潘正磊:再过三五年 AI会变成开发人员的基本概念

在微软Build 2018开发者大会上&#xff0c;微软公司全球开发平台事业部的资深副总裁潘正磊&#xff08;Julia Liuson&#xff09;接受了界面记者在内的采访。潘正磊在微软西雅图总部带领一千多人组成的团队&#xff0c;微软的开发工具&#xff0c;包括Visual Studio&#xff0c…

codeforces 938D Buy a Ticket 有初值的Dijkstra、有趣的题目

题意 给出一些城市电影票的价格&#xff0c;以及城市之间交通的路费&#xff0c;询问每一个城市怎样才能花最少的钱看到电影&#xff08;看完电影还要再回来&#xff09;。 题解 这是一道不太难但是挺有趣的题目。 我们这样想&#xff0c;每个城市只需要查看票价比他更便宜的城…

P2480-[SDOI2010]古代猪文【中国剩余定理,Lucas定理】

大早上起来写题有助于醒脑&#xff08;其实是昨晚没睡好/kk 正题 题目链接:https://www.luogu.com.cn/problem/P2480 题目大意 给出nnn和ggg&#xff0c;求g∑d∣nCnd%999911659g^{\sum_{d|n}C_{n}^d}\% 999911659g∑d∣n​Cnd​%999911659 解题思路 因为999911659999911659…

qMISPlat入门级使用问题解答一

qMISPlat 2.0(业务配置开发平台) 自2018-4-18号正式开源以来&#xff0c;得到了众多.net core爱好者的关注&#xff0c;现将近半个月以来&#xff0c;大家反馈的一些使用配置方面的问题统一作如下解答。如你对qMISPlat不了解&#xff0c;请查看文章qMISPlat产品介绍。一、从码云…

【DP】小明游天界(zjoj 2149)

小明游天界 题目大意&#xff1a; 有 m个单位时间&#xff0c;让你从1走到n&#xff08;不能早到&#xff0c;不能晚到&#xff09;&#xff0c;要使经过的城市最多&#xff0c;若无法用m个单位时间到达n就输出-1 样例输入 5 12 4 1 2 5 1 4 3 4 2 4 2 5 5 样例输出 …