解决此类问题首先是要读题目,本题有一个重点,在都满足的情况下选择离加油站最近的那个居民点的距离要尽量远。如果没有读题清楚可能这里会出错,另外注意本题的输出,最小的那个距离是double形式的,所以要么设置要同一。最后dev和cb两种开发环境下结果不同,如果在dev下的结果为3.2也不用慌,最后在在线提交上去的时候就是3.3了。

#include<cstdio>
#include<string>
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=10100;
const int inf=0x3fffffff;
int n,m,k,ds,d[maxn],G[maxn][maxn],ansid=0;
double ansavg=inf,ansmin=-1;
bool vis[maxn]={false};
int change(string a)
{int len=a.size(),id=0;for(int i=0;i<len;i++){if(a[i]!='G'){id=id*10+(a[i]-'0');}}if(a[0]=='G')return n+id;else return id;
}
void dijkstra(int s)
{fill(d,d+maxn,inf);memset(vis,false,maxn);d[s]=0;for(int i=1;i<=n+m;i++){int min=inf,u=-1;for(int j=1;j<=n+m;j++){if(vis[j]==false&&d[j]<min){u=j;min=d[j];}}if(u==-1)return;vis[u]=true;for(int v=1;v<=n+m;v++){if(vis[v]==false&&G[u][v]!=inf&&G[u][v]+d[u]<d[v]){d[v]=G[u][v]+d[u];}}}
}
int main()
{cin>>n>>m>>k>>ds;string str1,str2;int c1,c2,dis;fill(G[0],G[0]+maxn*maxn,inf);for(int i=0;i<k;i++){cin>>str1>>str2>>dis;c1=change(str1);c2=change(str2);G[c1][c2]=G[c2][c1]=dis;}for(int i=n+1;i<=n+m;i++){dijkstra(i);bool flag=false;double min=inf;double  avg=0;for(int j=1;j<=n;j++){if(d[j]>ds){flag=true;break;}avg+=1.0*d[j]/n;if(d[j]<min) min=d[j];}if(flag==true)continue;if(min>ansmin){ansmin=min;ansid=i;ansavg=avg;}else if(min==ansmin&&avg<ansavg){ansid=i;ansavg=avg;}}if(ansid!=0){printf("G%d\n",ansid-n);printf("%.1f %.1f",ansmin,ansavg);}else{printf("No Solution");}
}

A1072 Gas Station (30) 最短路径djkstra算法相关推荐

  1. PAT甲级1072 Gas Station (30 分):[C++题解]dijkstra算法、最短路

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 所有的dist[ ]都≤Ds:最小的dist[ ]最大; dist[ ] 总和最大. 由于加油站是字符,为了简单起见,将m个加油站编 ...

  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 + 枚举】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805396953219072 题目说的不清不楚,应该直接说要建一个加油站, ...

  4. 最短路径——Dijkstra算法HDU Today(hdu2112)

    关于本题的floyd解法:http://blog.csdn.net/sm9sun/article/details/53282826 上篇博文介绍了floyd解决最短路径的方法,然而由于floyd极大的 ...

  5. 最短路径——Floyd算法HDU Today(hdu2112)

    最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径. 算法具体的形式包括: 确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题. 确定终点的 ...

  6. floyd算法_最短路径的算法:Floyd算法

    点击箭头处"蓝色字",关注我们哦!! 算法 最短路径的算法-Floyd算法 ● ○ ● Shortest Path Algorithm - Floyd Algorithm ● ○ ...

  7. 最短路径-Dijkstra算法与Floyd算法

    最短路径-Dijkstra算法与Floyd算法 原文:https://www.cnblogs.com/smile233/p/8303673.html 一.最短路径 ①在非网图中,最短路径是指两顶点之间 ...

  8. 最短路径(Dijkstra算法)(c/c++)

    Dijkstra是一种求单源点最短路径的算法,即求某一个顶点到其余各顶点之间的最短路径,下面采用邻接矩阵来存储图中信息 算法思路为: 1,假设v0是源点,s是已求得最短路径的终点集合,用D[i]来保存 ...

  9. 134. Gas Station加油站

    [抄题]: There are N gas stations along a circular route, where the amount of gas at station i is gas[i ...

最新文章

  1. Linux那些事儿 之 戏说USB(8)从这里开始
  2. 1020 Tree Traversals
  3. 执行计划有时不准确_生管如何应对采购物料不及时、回不来?
  4. struct 模块 把一个类型,如数字,转成固定长度的bytes
  5. 德勤:95%的受访公司将在2019年投资区块链
  6. malloc,free,new,delete解析(原)
  7. linux 误删除mysql表能恢复吗,Linux中误删除数据文件和归档日志的恢复方法
  8. java字符串装双精度_Java 将双精度值转换为字符串
  9. python xlwt xlrd 写入一行_自己总结python用xlrd\xlwt读写excel
  10. 用逻辑回归对用户分类 (理论+实战)
  11. 8.XSD 复合元素
  12. 学校多媒体讲台计算机怎么开,学校教室多媒体使用说明.PPT
  13. 高通 lcd dtsi
  14. 华为HCNA之OSPF多区域配置实验
  15. AARRR模型:用户激活指标+方法,很实用!
  16. C4D倒角应用—样条挤压后如何正确倒角
  17. ASP医院管理系统—病历管理系统的设计与实现
  18. 字符串右移n位,例如 “hello world“ 右移两位 后ldhello wor
  19. html5播放器播放尺寸出界了,移动端弹性滑动以及滑动出界解决方案
  20. 将彩色图像变为素描图像,超简单!

热门文章

  1. LINUX自学第一课
  2. 如何搭建一套指标体系?
  3. c语言——游戏思路及其相关函数
  4. 微型计算机显卡坞介绍,自带GTX 1070 全球最小显卡扩展坞亮相
  5. 一、ECMAScript 6/7/8简介
  6. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
  7. 牛客_美团点评2020校招前端笔试题(仅个人学习记录)
  8. 有限差分法和有限体积法的区别
  9. matlab fm非相干解调,FM调制和相干解调,非相干解调.pdf
  10. 2021年--中国工商银行软件开发中心--社会招聘(春季)