PAT甲级——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 G
1 to G
M.
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
即对每个加油站都是用Dijkstra计算最小距离
#include <iostream>
#include <vector>
#include <string>
#define inf 999999999
using namespace std;
int N, M, K, Ds, indexG = -;
double minG = -, avgG;
int city[][];
int main()
{
cin >> N >> M >> K >> Ds;
fill(city[], city[] + * , inf);
for (int i = ; i < K; ++i)
{
string s1, s2;
int a = , b = , dis;
cin >> s1 >> s2 >> dis;
if (s1[] == 'G')
{
a += N;
s1.erase(, );
}
if (s2[] == 'G')
{
b += N;
s2.erase(, );
}
a += stoi(s1);
b += stoi(s2);
city[a][b] = city[b][a] = dis;
}
//Dijsktra
for (int k = N+; k <= N+M; ++k)//每个加油站都是用一次dij
{
int temp[];
fill(temp, temp + , inf);
bool visit[];
fill(visit, visit + , false);
temp[k] = ;
for (int i = ; i <= N+M; ++i)
{
int v = -, minDis = inf;
for (int j = ; j <= N+M; ++j)
{
if (visit[j] == false && minDis > temp[j])
{
v = j;
minDis = temp[j];
}
}
if (v == -)break;
visit[v] = true;
for (int u = ; u <= N+M; ++u)
{
if (visit[u] == false && city[v][u] != inf)
{
if (temp[u] > temp[v] + city[v][u])
temp[u] = temp[v] + city[v][u];
}
}
}
int flag = , minD = inf;
double avgD = 0.0;
for (int i = ; i <= N; ++i)
{
minD = minD < temp[i] ? minD : temp[i];
avgD += (double)temp[i];
if (temp[i] > Ds)
{
flag = ;
break;
}
}
avgD /= N;
if (flag == && minG <= minD)
{
if ((minG < minD) || (minG == minD && avgD < avgG))
{
minG = minD;
indexG = k;
avgG = avgD;
}
else if (minG == minD && avgD == avgG)
indexG = indexG < k ? indexG : k;
}
}
if (indexG == -)
cout << "No Solution" << endl;
else
printf("G%d\n%.1f %.1f\n", indexG - N, minG, avgG);
return ;
}
PAT甲级——1072 Gas Station的更多相关文章
- pat 甲级 1072. Gas Station (30)
1072. Gas Station (30) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A gas sta ...
- 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 Advanced 1072 Gas Station (30) [Dijkstra算法]
题目 A gas station has to be built at such a location that the minimum distance between the station an ...
- PAT 1072 Gas Station[图论][难]
1072 Gas Station (30)(30 分) A gas station has to be built at such a location that the minimum distan ...
- 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)
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 ...
- 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 ...
随机推荐
- 如何收集项目日志统一发送到kafka中?
上一篇(http://qindongliang.iteye.com/blog/2354381 )写了收集sparkstreaming的日志进入kafka便于后续收集到es中快速统计分析,今天就再写一篇 ...
- java OOP第二章_封装
一. 封装: 属性通过private访问修饰符将其设置为私有的,只有当前类中可以访问,同时提供通过public访问修饰符的公共方法可以给任何类中访问. 通常针对属性提供公共的setter方法进行赋值, ...
- iOS开发系列-LLVM、Clang
LLVM LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展. 我们可以认为LLVM是一个完整 ...
- sql (9) COUNT
COUNT() 函数返回匹配指定条件的行数.语法SQL COUNT(column_name) 语法COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):新建表 Stude ...
- WPF命令好状态刷新机制
https://blog.csdn.net/WPwalter/article/details/90344470 this.DispatcherInvoke(() => { System.Wind ...
- 期望dp+高斯消元优化——uvalive4297好题
非常好的题!期望+建矩阵是简单的,但是直接套高斯消元会T 所以消元时要按照矩阵的形态 进行优化 #include<bits/stdc++.h> using namespace std; ; ...
- 获取硬件信息的delphi源码CPUID、操作系统、Mac物理地址、计算机名称、IP地址、用户名
{-----------------------------------------------------------------------------作者:sushengmiyan 2013.0 ...
- 洛谷 P2114 [NOI2014]起床困难综合症
题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因 ...
- JS 基本的介绍
JS中的注释 HTML的注释:<!—注释内容--> CSS注释:/* 注释 */ JavaScript的注释:// 或 /* 多行注释 */ 变量 1.变量的概念 变量是变化 ...
- 13_springmvc拦截器应用
一.实现登录认证 1.需求: 用户请求url,拦截器进行拦截校验 如果请求的url是公开地址(无需登陆即可访问的url),让放行 如果用户session 不存在跳转到登陆页面 如果用户session存 ...