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 D​S​​, 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的更多相关文章

  1. PAT 1072 Gas Station[图论][难]

    1072 Gas Station (30)(30 分) A gas station has to be built at such a location that the minimum distan ...

  2. pat 甲级 1072. Gas Station (30)

    1072. Gas Station (30) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A gas sta ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 1072. Gas Station (30)

    先要求出各个加油站 最短的 与任意一房屋之间的 距离D,再在这些加油站中选出最长的D的加油站 ,该加油站 为 最优选项 (坑爹啊!).如果相同D相同 则 选离各个房屋平均距离小的,如果还是 相同,则 ...

  7. 1072. Gas Station (30) 多源最短路

    A gas station has to be built at such a location that the minimum distance between the station and a ...

  8. 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 ...

  9. PAT 1072. Gas Station

    A gas station has to be built at such a location that the minimum distance between the station and a ...

  10. PAT甲级——1072 Gas Station

    A gas station has to be built at such a location that the minimum distance between the station and a ...

随机推荐

  1. zabbix Python3管理

    import requests import json import os # user config here ip = '192.168.52.130' user = "root&quo ...

  2. Flask:基本结构

    在大多数标准中,Flask 都算是小型框架,小到可以称为"微框架".但是,小并不意味着它比其他框架的功能少.Flask 自开发伊始就被设计为可扩展的框架,它具有一个包含基本服务的强 ...

  3. Django 报错 Reverse for 'content' not found. 'content' is not a valid view function or pattern name.

    Django 报错 Reverse for 'content' not found. 'content' is not a valid view function or pattern name. 我 ...

  4. while、do...while和for循环

    一.循环 1.1 定义 当满足一定条件的时候,重复执行某一段代码的操作 while和for和do...while是java中的循环 二.while循环 2.1 定义 int i = 0: 初始化值 w ...

  5. 如果要是把标记为2的那一行Lable1.Text改为其他的Lable显示执行代码

    转: 如果要是把标记为2的那一行Lable1.Text改为其他的Lable显示执行代码 如图,程序很简单,文件路径也没问题,为什么会报错,百思不得其解?[url]https://book.douban ...

  6. Spring Security 整合 微信小程序登录的思路探讨

    1. 前言 原本打算把Spring Security中OAuth 2.0的机制讲完后,用小程序登录来实战一下,发现小程序登录流程和Spring Security中OAuth 2.0登录的流程有点不一样 ...

  7. SpringBoot启动流程原理解析(二)

    在上一章我们分析了SpingBoot启动流程中实例化SpingApplication的过程. return new SpringApplication(primarySources).run(args ...

  8. Codeforces 1015E1 Stars Drawing (Easy Edition)

    题面: 传送门 题目描述: 要求用十字星星来画题目给出的"星"图.如果不能用十字星星来画"星"图,输出-1:如果能,则输出要在图的哪个位置画相应大小的十字星图. ...

  9. 混合编程:如何用python11调用C++

    摘要:在实际开发过程中,免不了涉及到混合编程,比如,对于python这种脚本语言,性能还是有限的,在一些对性能要求高的情景下面,还是需要使用c/c++来完成. 那怎样做呢?我们能使用pybind11作 ...

  10. C# 获取Word文本高亮和背景(附vb.net代码)

    Word中的文本高亮和背景是通过不同方法来设置的.文本高亮(Text Highlight Color)是通过[字体]中的快速工具栏设置:文本背景(Text Background/Shading)是通过 ...