洛谷 P2935 [USACO09JAN] Best Spot S

文章目录

  • [USACO09JAN] 最佳牧场 S
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • 思路解析
  • CODE



[USACO09JAN] 最佳牧场 S

题目链接:https://www.luogu.com.cn/problem/P2935

题目描述

贝茜,总是希望优化她的生活,她发现自己真的很喜欢访问农夫约翰的P (1 <= P <= 500)个牧场中的F (1 <= F <= P)个她最喜欢的牧场F_i。

贝茜知道她可以通过C (1 <= C <= 8,000)条双向的牛道(方便地编号为1…C)来连接各个牧场,以便在整个农场的任何牧场之间旅行。每条路径P_i都有一个时间T_i (1 <= T_i <= 892)来穿越该路径(无论哪个方向)和两个路径端点a_i和b_i (1 <= a_i <= P; 1 <= b_i <= P)。

贝茜想找到最好的牧场来睡觉,这样当她醒来时,到达她的F个最喜欢的牧场的平均时间就最小了。

举例来说,考虑一个农场的布局如下图所示,其中*'d牧场编号是最喜欢的。括号中的数字是穿越牛道的时间。

1*--[4]--2--[2]--3|       |[3]     [4]|       |4--[3]--5--[1]---6---[6]---7--[7]--8*|       |        |         |[3]     [2]      [1]       [3]|       |        |         |13*      9--[3]--10*--[1]--11*--[3]--12*

以下表格显示了牧场4、5、6、7、9、10、11和12的潜在’最佳位置’的距离:

      * * * * * * 最喜欢的 * * * * * *潜在的最佳      牧场     牧场     牧场     牧场     牧场     牧场     平均
牧场              1       8      10      11      12      13        距离
------------      --      --      --      --      --      --      -----------4              7      16       5       6       9       3      46/6 = 7.675             10      13       2       3       6       6      40/6 = 6.676             11      12       1       2       5       7      38/6 = 6.337             16       7       4       3       6      12      48/6 = 8.009             12      14       3       4       7       8      48/6 = 8.0010             12      11       0       1       4       8      36/6 = 6.00 ** 最佳11             13      10       1       0       3       9      36/6 = 6.0012             16      13       4       3       0      12      48/6 = 8.00

因此,假设这些选择是最好的(一个程序必须以某种方式检查所有的选择),最好的睡觉地点是牧场10。

约翰拥有P(1<=P<=500)个牧场.贝茜特别喜欢其中的F个.所有的牧场 由C(1 < C<=8000)条双向路连接,第i路连接着ai,bi,需要Ti(1<=Ti< 892)单 位时间来通过.

作为一只总想优化自己生活方式的奶牛,贝茜喜欢自己某一天醒来,到达所有那F个她喜欢的 牧场的平均需时最小.那她前一天应该睡在哪个牧场呢?请帮助贝茜找到这个最佳牧场.

此可见,牧场10到所有贝茜喜欢的牧场的平均距离最小,为最佳牧场.

输入格式

* 第1行:三个空格分隔的整数:P、F和C

* 第2行到F+1行:第i+2行包含一个整数:F_i

* 第F+2行到C+F+1行:第i+F+1行用三个空格分隔的整数描述牛道i:a_i、b_i和T_i

输出格式

* 第1行:一行,一个整数,表示最好的牧场在哪里睡觉。如果有多个牧场是最好的,选择最小的那个。

样例 #1

样例输入 #1

13 6 15 
11 
13 
10 
12 
8 
1 
2 4 3 
7 11 3 
10 11 1 
4 13 3 
9 10 3 
2 3 2 
3 5 4 
5 9 2 
6 7 6 
5 6 1 
1 2 4 
4 5 3 
11 12 3 
6 10 1 
7 8 7

样例输出 #1

10

提示

如题目所述

如题目所述。



思路解析

F l o y d Floyd Floyd 算法将多源最短路算出多源点的最短路距离,最后加起来比较即可。


CODE

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>
#define ll long long
#define INF 0x3f3f3f3f using namespace std;typedef pair<int, int> pii;const int N = 520, M = 8010;
int d[N][N]; // 存储每个节点之间的最短距离
int n, m, k; // n是节点数,k是喜欢的节点数,m是边的数目
vector<int> love; // 存储喜欢的节点// Floyd-Warshall算法,用于计算所有节点对之间的最短路径
void floyd(){for(int k = 1; k <= n; ++k)for(int i = 1; i <= n; ++i)for(int j = 1; j <= n; ++j)d[i][j] = min(d[i][j], (d[i][k] == INF || d[k][j] == INF) ? INF : d[i][k] + d[k][j]);
}int main(){cin >> n >> k >> m; // 输入节点数,喜欢的节点数,边的数目// 初始化距离矩阵for(int i = 1; i <= n; ++i)for(int j = 1; j <= n; ++j)d[i][j] = (i == j ? 0 : INF);// 输入喜欢的节点while(k--){int f;scanf("%d", &f);love.push_back(f); }// 输入边的信息while(m--){int a, b, w;scanf("%d%d%d", &a, &b, &w);d[a][b] = d[b][a] = min(d[a][b], w);}// 计算所有节点对之间的最短路径floyd();int ans = 0, res = INF; // 初始化答案和最小平均距离// 遍历所有节点,找到平均距离最小的节点for(int i = 1; i <= n; ++i){int tmp = 0;for(int j = 0; j < love.size(); ++j){tmp += d[i][love[j]];}if(res > tmp){res = tmp;ans = i;}}cout << ans; // 输出结果
}
  • 唯一需要注意的点就是res要初始化成一个很大的数,不然会影响后续记录最小的点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下activemq的安装与安装成功确认

一、下载 apache-activemq-5.14.0-bin.tar.gz 二、安装 将压缩包拷入linux内&#xff0c;进行解压tar -zxvf apache-activemq-5.14.0-bin.tar.gz&#xff0c;与redis、nginx不同的是&#xff0c;active解压不需要安装就可以直接启动&#xff01; 启动命令&#xff1a;./bin…

1949-2021年全国31省公路里程数据

1949-2021年全国31省公路里程数据 1、指标&#xff1a;公路里程 2、范围&#xff1a;包括31省 1978-2021年期间无缺失 3、来源&#xff1a;各省NJ、产业NJ、各省统计GB 4、指标解释&#xff1a;公路里程指报告期末公路的实际长度。 统计范围&#xff1a;包括城间、城乡间、乡…

Rocketmq架构

NameServer&#xff1a;作为注册中心&#xff0c;提供路由注册、路由踢出、路由发现功能&#xff0c;舍弃强一致&#xff0c;保证高可用&#xff0c;集群中各个节点不会实时通讯&#xff0c;其中一个节点下线之后&#xff0c;会提供另外一个节点保证路由功能。 Rocket mq name…

java学习part32StringBuffer和StringBuilder

Java中的值传递和引用传递&#xff08;详解&#xff09; - 知乎 (zhihu.com) 146-常用类与基础API-StringBuffer与StringBuilder的源码分析、常用方法_哔哩哔哩_bilibili 1. 2.扩容机制 不够用&#xff1a;长度为 原长度*22&#xff1b;如果还不够&#xff0c;那么就扩容到目…

软件工程期末复习(2)

学习资料 设计模式与软件体系结构【期末全整理答案】_软件设计模式与体系结构期末考试题_鸽子不二的博客-CSDN博客 软件设计与体系结构(第二版)部分习题_软件设计与体系结构第二版课后答案-CSDN博客 软件体系结构试题库试题和答案 - 豆丁网Docin 软件设计与体系结构复习 - CN…

当springsecurity出现SerializationException问题

当springsecurity出现SerializationException问题 01 异常发生场景 当我使用springsecurity时&#xff0c;登录成功后携带token访问接口出了问题 org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unrecognized field "userna…

多文件夹图片预处理:清除空值、重置大小、分割训练集

→ 清理空值 防止出现cannot identify image file 参考Python数据清洗----删除读取失败图片__简单版_python用pil读取图片出错删除掉-CSDN博客 #%pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python #可能需要重启jupyter import os import shutil imp…

【Unity动画】状态机添加参数控制动画切换(Animator Controller)

Unity - 手册&#xff1a;动画参数 在Unity中&#xff0c;动画状态的切换是通过Animator Controller中的过渡&#xff08;Transition&#xff09;来实现的。过渡是状态之间的连接&#xff0c;控制过渡一般都是靠调用代码参数 我们来实现一个案例&#xff1a; 创建动画状态机&a…

构造函数的定义

当定义一个构造函数时&#xff0c;它的格式如下&#xff1a; ClassName(parameters) : member1(initializer), member2(initializer), ... {// 构造函数的主体 }其中&#xff1a; ClassName 是结构体或类的名称&#xff0c;表示构造函数所属的结构体或类。parameters 是构造函…

leetcode 142.环形链表2

我来更新 leetcode 题目了&#xff0c;接着上一次&#xff0c;这一次是上一道题目的提升&#xff08;有点数学题的感觉&#xff09; 142.环形链表2 题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表…

识KDJ指标,看懂超买超卖信号

一、认识KDJ 1、KDJ的含义 KDJ分析股票中短期趋势的一个常用指标&#xff0c;中文名称“随机指标”。它是一个综合考虑股票最高价、最低价和收盘价的技术指标&#xff0c;能够帮助我们根据历史价格预测出股票未来的价格走势。在实际应用的过程中&#xff0c;它的短期预测功能要…

JAVA毕业设计113—基于Java+Springboot+Vue的体育馆预约系统(源代码+数据库+12000字论文)

基于JavaSpringbootVue的体育馆预约系统(源代码数据库12000字论文)113 一、系统介绍 本项目前后端分离&#xff0c;本系统分为管理员、用户两种角色 用户角色包含以下功能&#xff1a; 注册、登录、场地(查看/预订/收藏/退订)、在线论坛、公告查看、我的预订管理、我的收藏…

TimeGPT:时间序列预测模型实例

时间序列预测领域正在经历一个非常激动人心的时期。在过去的三年里&#xff0c;我们见证了许多重要的贡献&#xff0c;如N-BEATS、N-HiTS、PatchTST和TimesNet等。同时&#xff0c;大型语言模型&#xff08;LLM&#xff09;近来在流行度方面取得了很大的成功&#xff0c;例如Ch…

PMP-01

考纲 需要看的书籍 学习计划

04-数据库操作对象Statement对象和PreparedStatement对象的区别,SQL注入的优缺点

Statement对象和查询结果集 Statement对象相关的方法 Connection接口中获取数据库操作对象Statement对象的方法 方法名功能Statement createStatement()创建Statement对象 Statement对象执行增删改查的SQL语句(不含占位符"?")的方法,JDBC中的SQL语句不需要提供分…

Verilog 入门(八)(验证)

文章目录 编写测试验证程序波形产生值序列重复模式 测试验证程序实例从文本文件中读取向量实例&#xff1a;时序检测器 测试验证程序用于测试和验证设计方法的正确性。Verilog 提供强有力的结构来说明测试验证程序。 编写测试验证程序 测试验证程序有三个主要目的&#xff1a;…

minigpt4安装的一系列问题

问题一 合并权重&#xff1a; python -m fastchat.model.apply_delta --base /data/qq/llama2-7b-chat-hf --target /data/qq/MiniGPT-4/vicuna_weights/ --delta /data/qq/vicuna-7b-delta-v0fastchat版本与模型版本 不兼容 解决方法&#xff1a; 第一种&#xff1a;用低版…

程序的未定义行为(Undefined Behavior)

未定义行为&#xff08;Undefined Behavior&#xff0c;简称UB&#xff09;是编程中一个重要而复杂的概念&#xff0c;尤其在像C和C这样的低级语言中更为常见。下面是对未定义行为的详细介绍&#xff1a; 定义 未定义行为指的是程序中的某些操作&#xff0c;其效果没有在编程…

【算法】滑动窗口题单——5.多指针滑动窗口醒醒⭐

文章目录 930. 和相同的二元子数组解法1——前缀和 哈希表解法2——滑动窗口 ⭐ 1248. 统计「优美子数组」1712. 将数组分成三个子数组的方案数⭐⭐⭐2444. 统计定界子数组的数目解法——多指针滑动窗口代码2——简洁写法&#xff1a;一次遍历O(1) 空间&#x1f402;⭐ 992. K…

linux之buildroot(4)配置项目

Linux之buildroot(4)配置项目 Author&#xff1a;Onceday Date&#xff1a;2023年12月3日 漫漫长路&#xff0c;才刚刚开始… 全系列文章请查看专栏: buildroot编译框架_Once_day的博客-CSDN博客。 参考文档&#xff1a; Buildroot - Making Embedded Linux Easy 文章目录…