https://pintia.cn/problem-sets/994805342720868352/problems/994805396953219072
题目说的不清不楚,应该直接说要建一个加油站,候选位置有以下几个。没说建一个还是两个。
分析:
就是枚举每一个加油站的候选位置,求最短路。然后根据题意找到最优解即可。这里的话点很少,直接朴素版的Dijkstra。
注意: 加油站的候选位置编号是字符串,需要将其映射要数字。
还要注意精度问题,加一特别小的数保持精度。

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+50;
int g[N][N],st[N],dist[N],n,m,k,d;
int get(string s)
{if(s[0]=='G') return n+stoi(s.substr(1));return stoi(s);
}
bool Dijkstra(int startx,int &temp_min,int &temp_sum)
{memset(dist,0x3f,sizeof dist); dist[startx]=0;memset(st,0,sizeof st);for(int i=0;i<n+m;i++){int t=-1;for(int j=1;j<=n+m;j++) if(!st[j]&&(t==-1 || dist[j]<dist[t])) t=j;st[t]=1;for(int j=1;j<=n+m;j++) dist[j]=min(dist[j],dist[t]+g[t][j]);}temp_min=1e9,temp_sum=0;for(int i=1;i<=n;i++) {if(dist[i]>d) return false;//超出距离的范围temp_sum+=dist[i];temp_min=min(temp_min,dist[i]);}return true;
}
int main(void)
{cin>>n>>m>>k>>d;memset(g,0x3f,sizeof g);for(int i=0;i<k;i++){string x,y;int a,b,c; cin>>x>>y>>c;a=get(x),b=get(y);g[a][b]=g[b][a]=min(g[a][b],c);}int flag=0,minv=0,sum=1e9;for(int i=n+1;i<=n+m;i++)//枚举每一个加油站{int temp_min=0,temp_sum=0;if(!Dijkstra(i,temp_min,temp_sum)) continue;if(temp_min>minv) flag=i,minv=temp_min,sum=temp_sum;else if(temp_min==minv&&temp_sum<sum) flag=i,sum=temp_sum;}if(flag) printf("G%d\n%.1lf %.1lf",flag-n,1.0*minv,sum*1.0/(n)+1e-7);else puts("No Solution");return 0;
}

1072 Gas Station (30 分)【难度: 中 / 知识点: Dijkstra + 枚举】相关推荐

  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. PAT甲级1030 Travel Plan (30分):[C++题解]dijkstra求单源最短路、保存路径

    文章目录 题目分析 题目链接 题目分析 来源:PAT网站 分析 dijkstra模板默写过来,然后多了一个保存路径,使用数组pre[N]记录最短路上每个点的前驱,通过pre数组保存到vector中 v ...

  4. 【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解

    problem L3-007 天梯地图 (30分) 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证 ...

  5. PAT甲级1087 All Roads Lead to Rome (30分):[C++题解]dijkstra求单源最短路综合、最短路条数、保存路径

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 首先这是一道dijkstra算法求最短路的题目,不过此题较为复杂.首先需要将字符串城市名映射成数字,这里使用hash table 名 ...

  6. 1034 Head of a Gang (30 分) 【难度: 中 / 知识点: 并查集】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805456881434624 首先不难想到的是并查集,不过这里有一个关键的 ...

  7. 1107 Social Clusters (30 分)【难度: 中 / 知识点: 并查集】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805361586847744 很不错的一个并查集的操作.你会发现我们需要处 ...

  8. 1143 Lowest Common Ancestor (30 分)【难度: 中 / 知识点: 最低公共祖先 未完成】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805343727501312

  9. 1057 Stack (30 分)【难度: 中 / 知识点: 树状数组 STL】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805417945710592 本题的一个最大的难点,就是如何给一个动态的区 ...

最新文章

  1. Android之自定义ViewPager实现图片的无线轮播
  2. MATLAB 无约束一维极值问题
  3. 隐藏在mock之后的‘快感’
  4. LINUX 触摸屏驱动
  5. 2.Java之路(Java语言开发环境搭建)
  6. Centos7下,简单DOCKER 使用.映射SSH端口到宿主主机.
  7. 小米10Pro手机双击android,小米10Pro:不完美,但很小米。
  8. nodejs模块hashmap
  9. unity3d 中加入�视频
  10. oracle性能优化求生指南_Vue项目性能优化--实践指南,网上最全最详细
  11. live2d_明日方舟:聊聊可露希尔的live2d以及live2d制作
  12. qt之QTcpSocket
  13. 学籍管理系统c语言项目作业,C语言实现学生学籍管理系统
  14. 使用phpStudy显示3306端口被占用,该怎么办?
  15. 第十一届蓝桥杯 b组
  16. 如何用photoshop CS制作标准一寸照
  17. 洛蒂(Lottie)
  18. 使用ST-LINK下载遇到的连接错误
  19. caffe配置 一生不可自决
  20. Html笔记——实现一组图片循环且首尾相连的滚动效果

热门文章

  1. python爬虫抖某音爬取视频 Airtest+fiddler
  2. LeetCode:汇总区间【228】
  3. Java Applet读写client串口——终极篇
  4. Net中常见问题及解决方法整理
  5. STM32之中断与事件---中断与事件的区别
  6. php 获取动态时间,PHP 显示动态时间
  7. 家里宽带628连不上_连不上无线网络?到底是路由器还是电脑的“锅”,看完这篇就知道...
  8. CRF++ 特征工程
  9. C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作
  10. 区块链与边缘计算(3)系统介绍