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 ...
随机推荐
- 后端程序员之路 8、一种内存kv数据库的实现
键值(Key-Value)存储数据库,这是一种NoSQL(非关系型数据库)模型,其数据按照键值对的形式进行组织.索引和存储.KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘 ...
- 剑指 Offer 32 - III. 从上到下打印二叉树 III + 双端队列使用 + 蛇形打印层次遍历序列 + 正倒序输出
剑指 Offer 32 - III. 从上到下打印二叉树 III Offer_32_3 题目详情 题解分析 本题我想的比较复杂,其实题目的要求只是需要遍历的结果逆序和正序交替,这个其实可以使用Coll ...
- 剑指 Offer 04. 二维数组中的查找 (思维)
剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值. 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下 ...
- HDOJ-4081(次小生成树+Prim算法)
Qin Shi Huang's National Road System HDOJ-4081 本题考查的是次小生成树的问题,这里的解决方法就是先使用Prim算法求解最小生成树. 在求解最小生成树的时候 ...
- System.Net.Mail邮件发送抄送附件(多个)
/// <summary> /// 邮件发送抄送附件 /// </summary> /// <param name="mailTo">收件人(可 ...
- Java变量-常量-作用域
public class Demo05 { /* 变量的命名规范:见名知意 1.类变量/实例变量/局部变量使用驼峰原则命名 2.类名使用Pascal命名法 3.常量名使用大写字母和下划线 4.驼峰原则 ...
- “/”应用程序中的服务器错误。||分析器错误消息: 未能加载类型“WebApplication1._Default”
环境VS2008 无法运行WEB项目,Winfrom程序OK. 新创建的WEB项目直接运行报下图错误. 尝试多种方法: 1,重新生成项目,运行.(失败) 2,重装VS2008(默认.完全.自定义)安装 ...
- 《Selenium自动化测试实战:基于Python》之 Selenium IDE插件的安装与使用
第3章 Selenium IDE插件的安装与使用 京东:https://item.jd.com/13123910.html 当当:http://product.dangdang.com/292045 ...
- 利用浏览器favicon的缓存机制(F-Cache)生成客户端浏览器唯一指纹
利用浏览器favicon的缓存机制(F-Cache)生成客户端浏览器唯一指纹 首先介绍下: 这个技术出自 UIC论文:https://www.cs.uic.edu/~polakis/papers/so ...
- 通过 ASM 库生成和修改 class 文件
在 JVM中 Class 文件分析 主要详细讲解了Class文件的格式,并且在上一篇文章中做了总结. 众所周知,JVM 在运行时, 加载并执行class文件, 这个class文件基本上都是由我们所写的 ...