题目大意

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

思路

注意

  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. Boost Bimap示例

    #include <string> #include <iostream> #include <boost/bimap.hpp> template< clas ...

  2. 01--Java集合知识

    一.Java集合概览 Java中集合分2大块,Collection和Map,分别代表不同功能的集合类对象,整体结构图如下: Collection├List│├LinkedList│├ArrayList ...

  3. windows 设置注册表服务自动启动

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\xxx\Start = ,=自动,,=禁用

  4. CAD绘制一个箭头(com接口)

    1 2 3 4 5 6 7 8 //绘制一个箭头  axMxDrawX1.PathMoveToEx(1000, 300, 10, 10, 0);  //设置路径下一点  axMxDrawX1.Path ...

  5. CodeCombat代码全记录(Python学习利器)--Kithgard地牢代码1

    Kithgard地牢注意:在调用函数时,要在函数的后面加上括号内容,否则在python中,将不会认为你在调用这个函数内容,而你的英雄将像木头一样站在原地不会执行上左下右的移动!!! hero.move ...

  6. php第二十节课

    JSON弹窗 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  7. JAVA学习总结-常用数据结构

    java中集合框架其实就是数据结构的实现的封装; 参考资料:任小龙教学视频 1,什么是数据结构? 数据结构是计算机存储,组织数据的方式; 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合; ...

  8. Linux之iptables(四、网络防火墙及NAT)

    网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...

  9. LVM和RAID

    RAID: Redundant Arrays of Inexpensive Disks Independent Berkeley: A case for Redundent Arrays of Ine ...

  10. 用fallocate进行"文件预留"或"文件打洞"【转】

    转自uestc-leon的博客 内容作了一些修改,查看原文请访问uestc-leon 1. 什么是空洞文件? "在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件 ...