1072 Gas Station (30)(30 分)
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 (<= 10^3^), the total number of houses; M (<= 10), the total number of the candidate locations for the gas stations; K (<= 10^4^), 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中途有个判断条件写错了总是有个点 不对,好蠢,station之间的距离可以可以超过range范围,判断的时候只需要判断house,啊。。。好蠢。n个house 1~n,station 1~m加到n后面,总的进行最短路
dijkstra,然后判断,取优。 代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <map>
#define inf 0x3f3f3f3f
#define MAX 2020
using namespace std;
int n,m,k,ds,d,mp[MAX][MAX],dis[MAX];
int vis[MAX];
char s1[],s2[];
int id,ma,sum;
int change(char *temp) {
int su = ,i = ,j = ;
if(temp[] == 'G') {
i ++;
j += n;
}
while(temp[i]) {
su = su * + temp[i ++] - '';
}
return su + j;
}
void dijkstra() {
for(int i = n + ;i <= n + m;i ++) {
memset(vis,,sizeof(vis));
int tsum = ,tma = ,flag = ;
for(int j = ;j <= n + m;j ++) {
dis[j] = mp[i][j];
}
while() {
int t = -,mi = inf;
for(int j = ;j <= n + m;j ++) {
if(!vis[j] && dis[j] < mi){
t = j,mi = dis[j];
}
}
if(t == -)break;
if(t <= n) {
if(dis[t] > ds || !tsum && dis[t] < ma) {
flag = ;
break;
}
else if(!tsum)tma = dis[t];
tsum += dis[t];
}
vis[t] = ;
for(int j = ;j <= n + m;j ++) {
if(vis[j] || mp[t][j] == inf)continue;
if(dis[t] + mp[t][j] < dis[j])dis[j] = dis[t] + mp[t][j];
}
}
if(!flag)continue;
if(tma > ma) {
id = i;
ma = tma;
sum = tsum;
}
else if(tsum < sum) {
sum = tsum;
id = i;
}
}
}
int main() {
scanf("%d%d%d%d",&n,&m,&k,&ds);
for(int i = ;i <= n + m;i ++) {
for(int j = ;j <= n + m;j ++) {
mp[i][j] = inf;
}
mp[i][i] = ;
}
for(int i = ;i < k;i ++) {
scanf("%s%s%d",s1,s2,&d);
int x = change(s1),y = change(s2);
mp[x][y] = mp[y][x] = d;
}
dijkstra();
if(!id)printf("No Solution");
else printf("G%d\n%.1f %.1f",id - n,(double)ma,(double)sum / (double)n);
}
1072 Gas Station (30)(30 分)的更多相关文章
- 1072 Gas Station (30 分)(最短路径)
#include<bits/stdc++.h> using namespace std; ; int n,m,k,Ds; int mp[N][N]; int dis[N]; int vis ...
- 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)
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[图论][难]
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)
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 ...
- 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 ...
随机推荐
- node.js介绍及Win7环境安装测试(转)
官网描述: Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable ...
- javascript判断智能终端信息
< script type = "text/javascript" > /* * 智能机浏览器版本信息: * */ var browser = { versions: ...
- INSTALL_FAILED_UID_CHANGED解决的方法
近期开发过程中又遇到了这个问题,最终找到了一个比較好的解决的方法.在此记录下. 打开手机或者pad中的设置----->安全----->未知来源(同意安装非安卓市场应用程序). 把这个取消, ...
- Spring学习三----------注入方式
© 版权声明:本文为博主原创文章,转载请注明出处 Spring注入方式 本篇博客只讲最常用的两种注入方式:设值注入和构造器注入.代码为完整代码,复制即可使用. 1.目录结构 2.pom.xml < ...
- MySQL 优化、设计规则浅谈
当数据量大,数据库相应慢时都会针对数据库进行优化.这时都是要针对具体情况,具体业务需求进行优化的. 但是有些步骤和规则应该适合各种情况的.这里综合网上找的资料简单分析一下. 第一优化你的sql和索引: ...
- RSA非对称算法实现HTTP密码加密传输
目前一般帐号系统,都是https来传输账户性息,申请一个https证书也不贵.但是网站的其它功能并不需要走https协议,https和http混布比较麻烦,所以决定先实现一个http协议传输RSA非对 ...
- 手把手实现andriod应用增量升级
近期研究了android应用增量升级的应用.当中用到了android NDK编程,先说下为什么要使用增量升级.当我们的应用达到一定大小的时候,比方眼下有30M.假设新版本号35M仅仅是添加了几个功能, ...
- c# .net 我的Application_Error 全局异常抓取处理
protected void Application_Error(object sender, EventArgs e) { //在出现未处理的错误时运行的代码 ...
- HDFS源码分析EditLog之读取操作符
在<HDFS源码分析EditLog之获取编辑日志输入流>一文中,我们详细了解了如何获取编辑日志输入流EditLogInputStream.在我们得到编辑日志输入流后,是不是就该从输入流中获 ...
- spring整合hibernate,在获取sessionFactory的时候报错,求解决办法!!
applicationContext.xml文件 <!-- 开启扫包 --> <context:component-scan base-package="cn.edu&qu ...