题目大意

  每个牧场里的某些坐标位置有牧区,牧区间有一个个路径(长度为位置间的直线距离)。一个连通块内两个节点间的最短路径长度最大值为它的直径。请编程找出一条连接两个不同牧场的路径,使得连上这条路径后,这个更大的新牧场有最小的直径。输出在所有牧场中最小的可能的直径。

思路

注意

  Floyd先枚举k。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <cassert>
using namespace std; const int MAX_NODE = 200;
const double INF = 200000;
double Dist[MAX_NODE][MAX_NODE];
int TotNode, TotBlock; struct Coor//Coordinate
{
int X, Y; double Dist(const Coor& a)const
{
double x1 = X, y1 = Y, x2 = a.X, y2 = a.Y;
double dx = abs(x1 - x2), dy = abs(y1 - y2);
return sqrt(dx * dx + dy * dy);
}
}; struct Node
{
Coor Coordinate;
double MaxDist;
}_nodes[MAX_NODE]; void InitDist()
{
for (int i = 0; i < MAX_NODE; i++)
for (int j = 0; j < MAX_NODE; j++)
Dist[i][j] = INF;
for (int i = 0; i < MAX_NODE; i++)
Dist[i][i] = 0;
} void Read()
{
scanf("%d", &TotNode);
for (int i = 1; i <= TotNode; i++)
scanf("%d%d\n", &_nodes[i].Coordinate.X, &_nodes[i].Coordinate.Y);
char s[MAX_NODE];
for (int i = 1; i <= TotNode; i++)
{
scanf("%s", s + 1);
for (int j = 1; j <= TotNode; j++)
if (s[j] - '0')
Dist[i][j] = _nodes[i].Coordinate.Dist(_nodes[j].Coordinate);
}
} void Floyd()
{
for (int k = 1; k <= TotNode; k++)
for (int i = 1; i <= TotNode; i++)
for (int j = 1; j <= TotNode; j++)
Dist[i][j] = min(Dist[i][j], Dist[i][k] + Dist[k][j]);
} double MaxMaxDist;
void GetNodeMaxDist()
{
for (int i = 1; i <= TotNode; i++)
for (int j = 1; j <= TotNode; j++)
if (Dist[i][j] < INF)
{
_nodes[i].MaxDist = max(_nodes[i].MaxDist, Dist[i][j]);
MaxMaxDist = max(MaxMaxDist, _nodes[i].MaxDist);
}
} double GetAns()
{
double ans = INF;
for (int i = 1; i <= TotNode; i++)
for (int j = 1; j <= TotNode; j++)
if (Dist[i][j] == INF)
ans = min(ans, _nodes[i].MaxDist + _nodes[j].MaxDist + _nodes[i].Coordinate.Dist(_nodes[j].Coordinate));
return max(ans, MaxMaxDist);
} int main()
{
InitDist();
Read();
Floyd();
GetNodeMaxDist();
printf("%.6f\n", GetAns());
return 0;
}

  

luogu1522 牛的旅行的更多相关文章

  1. 洛谷P1522 牛的旅行 Cow Tours

    ---恢复内容开始--- P1522 牛的旅行 Cow Tours189通过502提交题目提供者该用户不存在标签 图论 USACO难度 提高+/省选-提交该题 讨论 题解 记录 最新讨论 输出格式题目 ...

  2. 洛谷 P1522 牛的旅行 Cow Tours 题解

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

  3. codevs 1405 牛的旅行x

    牛的旅行 [问题描述] 农民John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧场不连通.现在,John想在农场里添加一条路径 ...

  4. P1522 牛的旅行

    P1522 牛的旅行 Cow Tours 提交 11.44k 通过 4.97k 时间限制 1.00s 内存限制 125.00MB 题目提供者洛谷 难度提高+/省选- 历史分数100 提交记录 查看题解 ...

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

    洛谷P1522 [USACO2.4]牛的旅行 Cow Tours 题意: 给出一些牧区的坐标,以及一个用邻接矩阵表示的牧区之间图.如果两个牧区之间有路存在那么这条路的长度就是两个牧区之间的欧几里得距离 ...

  6. [图论]牛的旅行 Cow Tours :Floyed-Warshall

    牛的旅行 Cow Tours 目录 牛的旅行 Cow Tours 题目描述 输入格式 输出格式 输入输出样例 输入 #1 输出 #1 解析 代码 题目描述 农民 John的农场里有很多牧区.有的路径连 ...

  7. 【USACO 2.4.3】牛的旅行

    [描述] 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...

  8. Luogu P1522 牛的旅行 Cow Tours

    题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...

  9. P1522 牛的旅行 Cow Tours floyed

    题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...

随机推荐

  1. c#遍历注册表

    --来自 https://blog.csdn.net/wenchangren/article/details/751863using System; using Microsoft.Win32; us ...

  2. Vue项目优化首屏加载速度

    Vue项目部署上线后经常会发现首屏加载的速度特别慢:那么有那写能做的简单优化呢 一.路由的懒加载 路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 结合 ...

  3. EF-Lamdba

    一丶基本语法 var userList=db.set<table>().where(c=>c.id=="001"&&c.userName.Cont ...

  4. 【原】Python学习_Django搭建环境及创建第一个项目

    1.Window 平台安装 Python 下载安装包    https://www.python.org/downloads/windows/ 2.Pyhton环境变量配置 右键点击"计算机 ...

  5. Centos7下mysql的主从配置

    最近,有朋友业务并发量比较大,让我帮他配置个主从,来缓解数据库的压力.下面就是我配置的,有需要的朋友可以借鉴下. 首先,我得到2台服务器: 172.18.2.142(主) 172.18.2.141(从 ...

  6. 内核调试-ftrace introduction

    ftrace https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace1/ https://www.ibm.com/developerworks/ ...

  7. CF997A Convert to Ones

    CF997A Convert to Ones 题目大意: 给你一个长度为 nn 的01串( n $\leq 3*10^5$ ),你有两种操作: 1.将一个子串翻转,花费 XX 2.将一个子串中的0变成 ...

  8. 2. Python中的基本输入、输出、格式化

    本文利用的是Python 3.x版本,建议学习3.x版本 Python中的基本输入.输出.格式化 1. 输入 使用input([prompt])读取一行,将其转换为string类型并返回,input的 ...

  9. elisp 编程 if 特殊表

    elisp中的 if 特殊表与其他语言中的 if 语句逻辑上并无二致,关键在于如何使用. (if (> 4 3) (message "4 is greater than 3" ...

  10. PAT 1100. Mars Numbers

    People on Mars count their numbers with base 13: Zero on Earth is called "tret" on Mars. T ...