1072 Gas Station
A gas station has to be built at such a location that the minimum distance between the station and any of the residential housing is as far away as possible. However it must guarantee that all the houses are in its service range.
Now given the map of the city and several candidate locations for the gas station, you are supposed to give the best recommendation. If there are more than one solution, output the one with the smallest average distance to all the houses. If such a solution is still not unique, output the one with the smallest index number.
Input Specification:
Each input file contains one test case. For each case, the first line contains 4 positive integers: N (≤), the total number of houses; M (≤), the total number of the candidate locations for the gas stations; K (≤), the number of roads connecting the houses and the gas stations; and DS, the maximum service range of the gas station. It is hence assumed that all the houses are numbered from 1 to N, and all the candidate locations are numbered from G1 to GM.
Then K lines follow, each describes a road in the format
P1 P2 Dist
where P1 and P2 are the two ends of a road which can be either house numbers or gas station numbers, and Dist is the integer length of the road.
Output Specification:
For each test case, print in the first line the index number of the best location. In the next line, print the minimum and the average distances between the solution and all the houses. The numbers in a line must be separated by a space and be accurate up to 1 decimal place. If the solution does not exist, simply output No Solution.
Sample Input 1:
4 3 11 5
1 2 2
1 4 2
1 G1 4
1 G2 3
2 3 2
2 G2 1
3 4 2
3 G3 2
4 G1 3
G2 G1 1
G3 G2 2
Sample Output 1:
G1
2.0 3.3
Sample Input 2:
2 1 2 10
1 G1 9
2 G1 20
Sample Output 2:
No Solution
题意:
给出m个候选的加油站建造地点,要求从中选取一个,使其距离住宅区的距离尽可能的远。如果存在相等的情况,则输出距离平均值最小的那个。
思路:
对每一个加油站运用Dijkstra算法求出该加油站到达其他结点的最小距离。然后在最小距离中寻找最大值。
Code:
1 #include <bits/stdc++.h>
2
3 using namespace std;
4
5 const int inf = 999999999;
6 int grap[1020][1020];
7 int visited[1020], dist[1020];
8
9 int main() {
10 int n, m, k, ds;
11 cin >> n >> m >> k >> ds;
12 fill(grap[0], grap[0] + 1020 * 1020, inf);
13 for (int i = 0; i < 1020; ++i) grap[i][i] = 0;
14 for (int i = 0; i < k; ++i) {
15 string p1, p2;
16 int d;
17 cin >> p1 >> p2 >> d;
18 int v1, v2;
19 if (p1[0] == 'G') {
20 v1 = stoi(p1.substr(1)) + n;
21 } else {
22 v1 = stoi(p1);
23 }
24 if (p2[0] == 'G') {
25 v2 = stoi(p2.substr(1)) + n;
26 } else {
27 v2 = stoi(p2);
28 }
29 grap[v1][v2] = grap[v2][v1] = d;
30 grap[v1][v2] = grap[v2][v1] = min(d, grap[v1][v2]);
31 }
32 int ansid = -1;
33 double ansdist = -1, ansaver = inf;
34 for (int i = n + 1; i <= n + m; ++i) {
35 double aver = 0, mindist = inf;
36 fill(visited, visited + 1020, 0);
37 fill(dist, dist + 1020, inf);
38 dist[i] = 0;
39 for (int j = 0; j < n + m; ++j) {
40 int u = -1, minn = inf;
41 for (int k = 1; k <= n + m; ++k) {
42 if (visited[k] == 0 && dist[k] < minn) {
43 u = k;
44 minn = dist[k];
45 }
46 }
47 if (u == -1) break;
48 visited[u] = 1;
49 for (int k = 1; k <= n + m; ++k) {
50 if (visited[k] == 0 && dist[k] > dist[u] + grap[u][k])
51 dist[k] = dist[u] + grap[u][k];
52 }
53 }
54 for (int j = 1; j <= n; ++j) {
55 if (dist[j] > ds) {
56 mindist = -1;
57 break;
58 }
59 if (dist[j] < mindist) mindist = dist[j];
60 aver += 1.0 * dist[j];
61 }
62 if (mindist == -1) continue;
63 aver = aver / n;
64 if (mindist > ansdist) {
65 ansdist = mindist;
66 ansaver = aver;
67 ansid = i;
68 } else if (mindist == ansdist && aver < ansaver) {
69 ansaver = aver;
70 ansid = i;
71 }
72 }
73
74 if (ansid == -1)
75 printf("No Solution\n");
76 else
77 printf("G%d\n%.1f %.1f\n", ansid - n, ansdist, ansaver);
78
79 return 0;
80 }
参考:
https://www.liuchuo.net/archives/2376
1072 Gas Station的更多相关文章
- PAT 1072 Gas Station[图论][难]
1072 Gas Station (30)(30 分) A gas station has to be built at such a location that the minimum distan ...
- pat 甲级 1072. Gas Station (30)
1072. Gas Station (30) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A gas sta ...
- 1072. Gas Station (30)【最短路dijkstra】——PAT (Advanced Level) Practise
题目信息 1072. Gas Station (30) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B A gas station has to be built at s ...
- PAT 甲级 1072 Gas Station (30 分)(dijstra)
1072 Gas Station (30 分) A gas station has to be built at such a location that the minimum distance ...
- PAT 1072. Gas Station (30)
A gas station has to be built at such a location that the minimum distance between the station and a ...
- 1072. Gas Station (30)
先要求出各个加油站 最短的 与任意一房屋之间的 距离D,再在这些加油站中选出最长的D的加油站 ,该加油站 为 最优选项 (坑爹啊!).如果相同D相同 则 选离各个房屋平均距离小的,如果还是 相同,则 ...
- 1072. Gas Station (30) 多源最短路
A gas station has to be built at such a location that the minimum distance between the station and a ...
- 1072 Gas Station (30)(30 分)
A gas station has to be built at such a location that the minimum distance between the station and a ...
- PAT 1072. Gas Station
A gas station has to be built at such a location that the minimum distance between the station and a ...
- PAT甲级——1072 Gas Station
A gas station has to be built at such a location that the minimum distance between the station and a ...
随机推荐
- 基于Docker Compose部署分布式MinIO集群
一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...
- 后端程序员之路 57、go json
go自带json处理库,位于encoding/json,里面的test很具参考意义,特别是example_test.go json - The Go Programming Languagehttps ...
- 剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制 Offer_35 题目详情 方法一 可以使用一个HashMap来存储旧结点和新结点的映射. 这种方法需要遍历链表两遍,因为需要首先知道映射关系才能求出next ...
- LeetCode-重建二叉树(前序遍历+中序遍历)
重建二叉树 LeetCode-105 首次需要知道前序遍历和中序遍历的性质. 解题思路如下:首先使用前序比遍历找到根节点,然后使用中序遍历找到左右子树的范围,再分别对左右子树实施递归重建. 本题的难点 ...
- ASP.NET如何把ASPX网站部署到IIS上
当一个项目完成了,你是否想过把它发布到服务器上去呢?那么下面就来告诉你如何去部署它吧! (Visual Studio版本: 2019) 首先要准备好你的项目 然后进行如下操作 第一大步骤 1.打开你需 ...
- [个人总结]pytorch中用checkpoint设置恢复,在恢复后的acc上升
原因是因为checkpoint设置好的确是保存了相关字段.但是其中设置的train_dataset却已经走过了epoch轮,当你再继续训练时候,train_dataset是从第一个load_data开 ...
- pip命令安装python包到指定目录
pip install wxpython --target=D:\Server\Python38\Lib\site-packages
- H5 简单实现打砖块游戏
实现效果如图所示: 1.布局 在html中,声明 div1 作为作为带有边框的父物体,一切行为都要在 div1 中进行.创建小球ball.左右可滑动的板子bat,以及存放要销毁的砖块的父物体 bri ...
- 浅谈Java的反射的原理
Java的编译过程 谈及反射,不得不先了解一下,java的整个编译过程,整体的java编译过程可以参考 之前的一篇 一个java文件被执行的历程 这里我们只针对 对象这一层级来讨论,一个java文件, ...
- Webpack 学习笔记(1) 开始
目录 参考资料 1. 基础设定 2. 创建一个包 3. 使用配置文件完成打包命令 4. 使用 NPM Scripts 完成打包命令 参考资料 Getting Started | Webpack web ...