luogu1522 牛的旅行
题目大意
每个牧场里的某些坐标位置有牧区,牧区间有一个个路径(长度为位置间的直线距离)。一个连通块内两个节点间的最短路径长度最大值为它的直径。请编程找出一条连接两个不同牧场的路径,使得连上这条路径后,这个更大的新牧场有最小的直径。输出在所有牧场中最小的可能的直径。
思路
注意
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 牛的旅行的更多相关文章
- 洛谷P1522 牛的旅行 Cow Tours
---恢复内容开始--- P1522 牛的旅行 Cow Tours189通过502提交题目提供者该用户不存在标签 图论 USACO难度 提高+/省选-提交该题 讨论 题解 记录 最新讨论 输出格式题目 ...
- 洛谷 P1522 牛的旅行 Cow Tours 题解
P1522 牛的旅行 Cow Tours 题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不 ...
- codevs 1405 牛的旅行x
牛的旅行 [问题描述] 农民John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧场不连通.现在,John想在农场里添加一条路径 ...
- P1522 牛的旅行
P1522 牛的旅行 Cow Tours 提交 11.44k 通过 4.97k 时间限制 1.00s 内存限制 125.00MB 题目提供者洛谷 难度提高+/省选- 历史分数100 提交记录 查看题解 ...
- 洛谷P1522 [USACO2.4]牛的旅行 Cow Tours
洛谷P1522 [USACO2.4]牛的旅行 Cow Tours 题意: 给出一些牧区的坐标,以及一个用邻接矩阵表示的牧区之间图.如果两个牧区之间有路存在那么这条路的长度就是两个牧区之间的欧几里得距离 ...
- [图论]牛的旅行 Cow Tours :Floyed-Warshall
牛的旅行 Cow Tours 目录 牛的旅行 Cow Tours 题目描述 输入格式 输出格式 输入输出样例 输入 #1 输出 #1 解析 代码 题目描述 农民 John的农场里有很多牧区.有的路径连 ...
- 【USACO 2.4.3】牛的旅行
[描述] 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...
- Luogu P1522 牛的旅行 Cow Tours
题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...
- P1522 牛的旅行 Cow Tours floyed
题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...
随机推荐
- HashMap的尾部遍历问题--Tail Traversing
在看网上HashMap的resize()设计时,提到尾部遍历. JDK1.7的HashMap在实现resize()时,新table[]的列表采用LIFO方式,即队头插入.这样做的目的是:避免尾部遍 ...
- JS高级——面向对象方式解决tab栏切换问题
注意事项 1.给li元素注册事件,函数里面的this指的li元素,那么我们可以在注册事件之前将Tab对象用that=this进行保存 2.使用沙箱模式,所以暴露给外面的变量使用的是window.tab ...
- React-Native WebView动态加载字体
背景 使用react-native构建的iOS/Android双端APP,通过WebView加载本地页面,需要根据服务器提供的字体列表实现下载和动态加载. 本地字体检查 有些字体手机操作系统已经提供了 ...
- Symbolicating Crash Reports With atos
地址:0x1000e4000 + 49116 = 0x00000001000effdc都是运行时地址: 0x1000e4000:基址偏移后的地址: 0x100000000: 共知基址:各个环境都知道, ...
- MFC CAD控制权问题
begineditorcommand(); 隐藏对话框 把控制权交给CAD completeeditorcommand(); 完成交互返回到应用程序 canceleditorcommand CAD被 ...
- oralce 创建表空间 和 查询进程
-- Create the user create user lesdba identified by les_321 default tablespace USERS temporary table ...
- 18清明校内测试T1
消失的数字(number) Time Limit:1000ms Memory Limit:128MB 题目描述 rsy拥有n个数,这n个数分别是a1,a2,…,an. 后来出现了一个熊孩子zhw, ...
- Problem 34
Problem 34 https://projecteuler.net/problem=34 145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 1 ...
- PAT 1097. Deduplication on a Linked List (链表)
Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplicated ...
- hadoop-磁盘出现坏盘,如何能在线换盘
涉及到磁盘存储路径的配置文件参数有: hdfs-site.xml <name>dfs.datanode.data.dir</name> yarn-site.xml <na ...