传送门

题目

农民 John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称为一个牧场。但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通。这样,Farmer John就有多个牧场了。输入文件包括牧区、它们各自的坐标,还有一个对称邻接矩阵。输入文件至少包括两个不连通的牧区。请编程找出一条连接两个不同牧场的路径,使得连上这条路径后,这个更大的新牧场有最小的直径。输出在所有牧场中最小的可能的直径。

输入格式:

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

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

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

输出格式:

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

只需要打到小数点后六位即可,不要做任何特别的四舍五入处理。

分析

以为n较小,所以我们可以用floyd求出任意联通两点的最短距离。然后我们就可以找到每个点在联通块中与其最远的点。我们枚举所有不连通的点,将这两个点连接,所得到的新的直径即为两点各自在原联通块的最大距离相加加两点间距离。注意新的直径可能没有原来的直径大。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const double inf=1e9+7;
double x[1100],y[1100],dmax[110000],d[1100][1100];
double len(int i,int j){return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));}
int main(){
      int n,m,i,j,k;
      cin>>n;
      for(i=1;i<=n;i++)cin>>x[i]>>y[i];
      for(i=1;i<=n;i++)
         for(j=1;j<=n;j++){
            if(i!=j)d[i][j]=inf;
            char s;
            cin>>s;
            if(s=='1'){
              d[i][j]=len(i,j);
            }
         }
      for(k=1;k<=n;k++)
         for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
               d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
      for(i=1;i<=n;i++)dmax[i]=0;
      double ans2=0;
      for(i=1;i<=n;i++)
         for(j=1;j<=n;j++)
            if(d[i][j]<inf){
              dmax[i]=max(dmax[i],d[i][j]);
              ans2=max(ans2,dmax[i]);
            }
      double ans=inf;
      for(i=1;i<=n;i++)
         for(j=1;j<=n;j++)
            if(i!=j)
              if(d[i][j]>=inf){
                ans=min(ans,dmax[i]+dmax[j]+len(i,j));
              }
      printf("%0.6lf",max(ans,ans2));
      return 0;
}

转载于:https://www.cnblogs.com/yzxverygood/p/9090661.html

p1522 牛的旅行 Cow Tours相关推荐

  1. 洛谷 P1522 牛的旅行 Cow Tours

    题目:牛的旅行 思路: 先预处理出两点间的距离,跑一边floyd,然后处理出每个点到离它最远的和它连通的距离L[i]. 然后再对于每个点,枚举所有和它不连通的点j,用L[i]+L[j]+d(i,j)更 ...

  2. P1522 牛的旅行 Cow Tours(floyd)

    给你平面上的一些点,一开始有一些点是相连的,相连的边权是两点间的欧几里得距离,输入数据保证至少存在一组互相不相连的点 把相连的点叫做一个联通块,一个联通块的直径是其中任意两点间最短路长度的最大值 现在 ...

  3. 信息学奥赛一本通 1343:【例4-2】牛的旅行 | 洛谷 P1522 [USACO2.4] 牛的旅行 Cow Tours

    [题目链接] ybt 1343:[例4-2]牛的旅行 洛谷 P1522 [USACO2.4] 牛的旅行 Cow Tours [题目考点] 1. 图论 最短路径 Floyd算法 Floyd算法时间复杂度 ...

  4. P1522 [USACO2.4] 牛的旅行 Cow Tours

    https://www.luogu.com.cn/problem/P1522 题目在这里 #include<bits/stdc++.h> using namespace std; doub ...

  5. P1522 [USACO2.4]牛的旅行 Cow Tours

    题目大意 链接 给出 n n n个牧区的坐标,某些牧区之间有路相连,一片连通的牧区被称为牧场(题目会给出至少2个牧场).现在要修一条路,连接两个不同的牧场.找出这条路,使连接的新牧场的直径最小.(一个 ...

  6. USACO2.4のP1522-牛的旅行(Cow Tours)【最短路Flody】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1522 题目大意 有n个点,连接任意两个不同联通块上的点,使这个新的 ...

  7. P1522 牛的旅行

    这题挺好--有几个坑--(反正我都跳进去了) 对于新的更大的图,由于求的是最小连接边,所以它的值可能小于之前单独一个图的最长的最短路-- 所以之后的值应该取个max(emmm--) 所以第一次我只拿了 ...

  8. usaco Cow Tours 牛的旅行

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

  9. P3033 [USACO11NOV]牛的障碍Cow Steeplechase

    P3033 [USACO11NOV]牛的障碍Cow Steeplechase 题目描述 详见:P3033 [USACO11NOV]牛的障碍Cow Steeplechase solution 裸题. 对 ...

最新文章

  1. PS5穿越云层3D文字
  2. 转iOS性能优化:Instruments使用实战
  3. 引领开源新风潮,阿里巴巴编程之夏第二期重磅来袭!
  4. Golang之envconfig的使用
  5. 《解剖PetShop》系列之二
  6. LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)
  7. php 日志按天截取,Laravel 日志管理:按日期切割日志
  8. android真机调试看不到logcat信息
  9. 网站前后端交互学习有感
  10. Parallels Desktop虚拟机如何安装win10和win11,懒人安装教程
  11. 数据分析师市场需求研究
  12. 色差(color diffference)在不同颜色空间下的计算方式
  13. word三线表标题两条线之间如何出现空白间隔(论文必备)
  14. 北京交通大学计算机学院 于剑,北京交通大学计算机与信息技术学院硕导介绍:于剑...
  15. Tilera 服务器上hadoop单机版测试
  16. html5 实心圆点,html5如何使用canvas画空心圆与实心圆
  17. 【简单数学】末日的传说
  18. SVN教程——02TortoiseSVN的使用
  19. 这些年,被“颠覆性创新”的五大行业
  20. Python每日一练(20)-用Python制作mini翻译器

热门文章

  1. response返回一段html,iframe调用后台方法通过response返回html代码
  2. html5代码大全文库,HTML颜色代码表
  3. html如何设置多个模块,在webpack中如何实现多页面开发
  4. php4种九九乘法表编程,PHP 99乘法表的几种实现代码
  5. 《计算机基础(2008版)》第4次作业,计算机基础第4次作业.doc
  6. 淮阴工学院计算机期末考选择题题库,淮阴工学院计算机导论题库.doc
  7. Java设计模式(代理模式-模板方法模式-命令模式)
  8. numpy中计算矩阵数值的核心函数
  9. 测量场效应晶体管(JFET) 2N3819
  10. 2021年春季学期-信号与系统-第九次作业参考答案