洛谷 P2935 [USACO09JAN] Best Spot S

2023-12-04 06:44

本文主要是介绍洛谷 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要初始化成一个很大的数,不然会影响后续记录最小的点

这篇关于洛谷 P2935 [USACO09JAN] Best Spot S的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/452527

相关文章

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

洛谷P5490扫描线

0是最小的数字,将一个线段看成一个区间,对于一个矩形,从下扫到上,入边为1,而出边为-1,意思是将这个区间上的所有点加1(区间修改).把线段表示为Line[i],其中记录了l,r,h,tag,左右端点,高度,入边还是出边(1或-1) 那么每次区间修改后不为0的区间它的值可能是1,2,3或者是其它数字,这不好统计,可以将它转化一下,0是不是表示没有被覆盖过的地方,我们只要统计0的个数然后用总长减去

最佳优先搜索best-find search

目录 1. 问题 2. 算法 3.代码 1. 问题 考虑下面这个问题:  我们要找到从Arad到Bucharest的路,最好是最短的路: 2. 算法 这是一个无向有环图, 可以采用最佳优先搜索: 最佳优先搜索的算法可以参考维基百科: 伪代码如下: // Pseudocode for Best First SearchBest-First-Search(Gr

扩展KMP --- HDU 3613 Best Reward

Best Reward Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3613   Mean:  给你一个字符串,每个字符都有一个权值(可能为负),你需要将这个字符串分成两个子串,使得这两个子串的价值之和最大。一个子串价值的计算方法:如果这个子串是回文串,那么价值就是这个子串所有字符权值之和;否则价值为0。

挤牛奶洛谷uasco

题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒。第二个农民在700秒开始,在 1200秒结束。第三个农民在1500秒开始2100秒结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300秒到1200秒),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200秒到1500秒)。

洛谷刷题(7)

P8738 [蓝桥杯 2020 国 C] 天干地支 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊 (wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。 地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ)、

C++ 洛谷 哈希表(对应题库:哈希,hash)习题集及代码

马上就开学了,又一个卷季,不写点东西怎么行呢?辣么,我不准备写那些dalao们都懂得,熟练的,想来想去,最终还是写哈希表吧!提供讲解&题目&代码解析哦! 奉上题目链接: 洛谷题目 - 哈希,hash 1、哈希、哈希表(hash)简介 哈希(Hash)是一种将任意长度的输入映射为固定长度输出的算法。哈希函数的输出值称为哈希值或散列值。哈希函数具有以下特性: 确定性:对于相同的输入

1012. The Best Rank (25)暴力枚举 排序

1012. The Best Rank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To evaluate the performance of our first year CS majored students, we consider