洛谷P1522 [USACO2.4]牛的旅行 Cow Tours
洛谷P1522 [USACO2.4]牛的旅行 Cow Tours
题意:
给出一些牧区的坐标,以及一个用邻接矩阵表示的牧区之间图。如果两个牧区之间有路存在那么这条路的长度就是两个牧区之间的欧几里得距离。
对于一个联通块,称之为一个牧场,也就是说一个牧场内任意一个牧区都可以到达该牧场内的任意的另外一个牧区。
对于一个牧场,它的直径是这个联通块内最短路的最大值。
现在让你在恰当地选择两个牧场,在这两个牧场中各自选一个牧区,在这两个牧区之间建路,要求建路之后所有牧场中最大的直径最小。这里其实如果产生了新的最大直径(也可能不产生新的最大直径),那么一定是在这个新的农场中产生的,所以这里不如说恰当选择两个牧场从中选择两个牧区建边,使得产生的新的牧场的直径最小。
输出建边之后所有农场中最大的直径。
题解:
很好的一道最短路题。
先按照题目要求建立邻接矩阵,之后再这个邻接矩阵中跑一次\(floyd\)。
用一个数组\(MaxDis\)维护对于每个牧区,它所在的牧场中离它最远的牧区的距离是多少。
这样枚举每个不存在边的牧场对,当假设他们连接之后,构成的新牧场的可能的直径\(d_{uv}=MaxDis[u]+MaxDis[v]+getDis(u,v)\),这里之所以说可能是因为可能原来\(u\)或\(v\)所在的农场直径比这个\(d_{uv}\)要大。
这里不需要考虑太细节,只需要用一个变量记录在不添加边的时候,所有牧场中直径的最大值,然后找到添加边之后最小的\(d\),在这两个值之间取较大的既是答案。原因很简单,我们担心的是\(d\)可能比原来的\(u\)或\(v\)所在牧场的直径小,所以新牧场的直径实际上是\(max\{d_{cur},d_u,d_v\}\),之后答案取\(min\{max\{d_{u_1v_1},d_{u_1},d_{v_1}\},d_{u_2v_2},d_{u_2},d_{v_2}\},...,d_{u_xv_x},d_{u_x},d_{v_x}\}\}\),这个等价于\(max\{d_{f_1},d_{f_2},...,d_{f_n},min\{d_{u_1v_1},d_{u_2v_2},...,d_{u_xv_x}\}\}=max\{max\{d_{f_i}\},min\{d_{u_jv_j}\}\}\),其中\(d_{f_i}\)表示第\(i\)个牧场的直径。
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
const int Maxn = 200;
const double INF = 1e7;
double dis[Maxn][Maxn], pos[Maxn][2], MaxDis[Maxn];
double getDis(int x, int y) {
return sqrt(pow(pos[x][0] - pos[y][0], 2) + pow(pos[x][1] - pos[y][1], 2));
}
void solve() {
int n, t;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%lf %lf", &pos[i][0], &pos[i][1]);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%1d", &t);
if (t == 1) {
dis[i][j] = dis[j][i] = getDis(i, j);
} else if (i != j) {
dis[i][j] = dis[j][i] = INF;
}
}
}
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
dis[i][j] = std::min(dis[i][j], dis[i][k] + dis[k][j]);
}
}
}
double max1 = 0, max2 = INF;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (dis[i][j] != INF) {
MaxDis[i] = std::max(MaxDis[i], dis[i][j]);
max1 = std::max(max1, dis[i][j]);
}
}
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (dis[i][j] == INF) {
max2 = std::min(max2, MaxDis[i] + MaxDis[j] + getDis(i, j));
}
}
}
printf("%.6f\n", std::max(max1, max2));
}
int main() {
solve();
return 0;
}
洛谷P1522 [USACO2.4]牛的旅行 Cow Tours的更多相关文章
- P1522 [USACO2.4]牛的旅行 Cow Tours(Floyd)
题目描述 Farmer John 的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer Joh ...
- 洛谷P1522 牛的旅行 Cow Tours
---恢复内容开始--- P1522 牛的旅行 Cow Tours189通过502提交题目提供者该用户不存在标签 图论 USACO难度 提高+/省选-提交该题 讨论 题解 记录 最新讨论 输出格式题目 ...
- 洛谷 P1522 牛的旅行 Cow Tours 题解
P1522 牛的旅行 Cow Tours 题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不 ...
- [图论]牛的旅行 Cow Tours :Floyed-Warshall
牛的旅行 Cow Tours 目录 牛的旅行 Cow Tours 题目描述 输入格式 输出格式 输入输出样例 输入 #1 输出 #1 解析 代码 题目描述 农民 John的农场里有很多牧区.有的路径连 ...
- 洛谷——P1821 [USACO07FEB]银牛派对Silver Cow Party
P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- LCA【洛谷P2971】 [USACO10HOL]牛的政治Cow Politics
P2971 [USACO10HOL]牛的政治Cow Politics 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向 ...
- 洛谷P2870 - [USACO07DEC]最佳牛线Best Cow Line
Portal Description 给出一个字符串\(s(|s|\leq3\times10^4)\),每次从\(s\)的开头或结尾取出一个字符接在新字符串\(s'\)的末尾.求字典序最小的\(s'\ ...
- 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party 题解
P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- 「洛谷P2906」[USACO08OPEN]牛的街区Cow Neighborhoods 解题报告
P2906 [USACO08OPEN]牛的街区Cow Neighborhoods 题目描述 Those Who Know About Cows are aware of the way cows gr ...
随机推荐
- zabbix_agent items not supported状态
不记得自己究竟更改了什么东西,然后突然发现所有的有关mysql的监控items都变成了not supported,怎么做不行,最后在web主页把主机删除,又重新添加一下,重新添加了一下模版就好了.这究 ...
- 【Spring】Spring中的Bean - 1、Baen配置
Bean配置 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 什么是Spring中的Bean? Spring可以被看作是一个 ...
- 容器编排系统K8s之HPA资源
前文我们了解了用Prometheus监控k8s上的节点和pod资源,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14287942.html:今天我们来了解下 ...
- Windows安全加固
Windows安全加固 # 账户管理和认证授权 # 1.1 账户 # 默认账户安全 # 禁用Guest账户. 禁用或删除其他无用账户(建议先禁用账户三个月,待确认没有问题后删除.) 操作步骤 本地用户 ...
- Angular入门到精通系列教程(11)- 模块(NgModule),延迟加载模块
1. 摘要 2. NgModule举例.说明 3. Angular CLI生成模块 4. 延迟加载模块 5. 总结 环境: Angular CLI: 11.0.6 Angular: 11.0.7 No ...
- 网络流量预测入门(一)之RNN 介绍
目录 网络流量预测入门(一)之RNN 介绍 RNN简介 RNN 结构 RNN原理 结构原理 损失函数$E$ 反向传播 总结 参考 网络流量预测入门(一)之RNN 介绍 了解RNN之前,神经网络的知识是 ...
- 前端面试之HTTP
前端面试之HTTP的基本性质 1 HTTP代理 在浏览器和服务器之间,有许多计算机和其他设备转发了HTTP消息.简而言之,他们中间的部分就是代理! 代理的作用 缓存(可以是公开的也可以是私有的,像浏览 ...
- 编程小技巧之 Linux 文本处理命令(二)
合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本篇文章是<Linux 文本处理命令> 续篇,在前文的基础上再介 ...
- 通俗易懂的解释:什么是API
API 全称 Application Programming Interface,即应用程序编程接口. 看到这里,急性子的小白同学马上就憋不住了:这不管是英文还是中文我每个字都懂啊,只是凑一块就不知道 ...
- your service shouldn’t know anything about HTTP headers, or gRPC error codes 干净架构 服务不应知道 HTTP头、gRPC错误码 服务仅知道服务相关的
Go kit - Frequently asked questions https://gokit.io/faq/ Services - What is a Go kit service? Servi ...