文章目录

  • 题目分析
  • 题目来源

题目分析



来源:acwing

分析:
所有的dist[ ]都≤Ds;最小的dist[ ]最大; dist[ ] 总和最大。

由于加油站是字符,为了简单起见,将m个加油站编号为n+1 ~n+m。

然后就是dijkstra算法的板子。

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1020,INF = 0x3f3f3f3f;
int n, m, k , D;int g[N][N];
int dist[N];
bool st[N];int get(string s){if(s[0]=='G')  return n+stoi(s.substr(1));return stoi(s);
}void dijkstra(int start, int &mind , int & sumd){memset(dist ,0x3f, sizeof dist);memset(st,0,sizeof st);dist[start]  = 0;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] = true;for(int j = 1; j<= n + m; j ++){dist[j] = min(dist[j] ,dist[t]+g[t][j]);}}for(int i =1; i<= n;i ++)if(dist[i] > D) {mind = -INF;return;}mind  = INF, sumd  = 0;for(int i =1; i<= n; i++ ){mind = min(mind ,dist[i]);sumd += dist[i];}
}
int main(){cin >> n >> m >> k >> D;memset(g, 0x3f,sizeof g);while(k--){string a,b;int z;cin >> a>> b>> z;int x = get(a) ,y = get(b);g[x][y] = g[y][x] = min(g[x][y],z);}int res= -1;//加油站int mind= 0;//最小值的最大值int sumd = INF;//总和的最小值for(int i= n+1; i<= n+m; i++){int d1 ,d2; //求mind和sumddijkstra(i ,d1 ,d2);if(d1 > mind )  res = i, mind = d1,sumd = d2;else if(d1 == mind && d2  < sumd) res = i,sumd = d2;}if(res == -1)  puts("No Solution");else printf("G%d\n%.1lf %.1lf\n",res- n,(double) mind, (double)sumd/n + 1e-8);
}

题目来源

PAT甲级1072 Gas Station (30 分)
https://www.acwing.com/problem/content/1560/

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

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

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

  2. 1072 Gas Station (30 分)【难度: 中 / 知识点: Dijkstra + 枚举】

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

  3. PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 堆首先是完全二叉树,所以先建完全二叉树,由于给定的是层序遍历的数据,所以直接用数组即可,注意数组下标从1开始,这样便满足结点u和左儿 ...

  4. PAT甲级1107 Social Clusters (30 分):[C++题解]并查集,爱好、人数

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 凭爱好,分人群.注意点:爱好可传递.什么意思?意思是A和B的有共同爱好1, B和C有共同爱好2,那么认为A和C也是同一群人. 按照爱 ...

  5. PAT甲级1103 Integer Factorization (30 分):[C++题解]背包问题,DP解法

    文章目录 题目分析 题目链接 题目分析 分析 把N(样例中N=169)看成背包的体积:把k(样例中k=5)看成背包能承的重量.把这道题转化为二维完全背包问题.由于数据范围给出的次幂P∈[2,7],那么 ...

  6. PAT甲级1049 Counting Ones (30 分):[C++题解]统计1的个数、数位统计

    文章目录 题目分析 题目链接 题目分析 来源:PAT网站 分析: 以数字abcdefg这个7位数字为例,说一下本题的思路. 1)数字1在每一位出现的次数. 2)以第d位为例,第d位的取值可以分为3种情 ...

  7. PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射

    文章目录 题目分析 题目链接 题目分析 来源:acwing 题目分析: 图论模拟题. 给定暗恋的两个人A 和B,需要寻找一对C 和D ,满足:A和C是朋友,C和D是朋友,D和B是朋友.而且A.C同性别 ...

  8. PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!

    文章目录 题目分析 题目链接 题目分析 原题: 来源:acwing 分析: 建图:所有能走到的点之间建立一条边,比如下面一条地铁线路有4站,它们是相通的,两两之间建一条边,边权是经过的站点数. 下面考 ...

  9. PAT甲级1111 Online Map (30分):[C++题解]两次dijkstra求单源最短路、保存路径、长度最短、时间最短

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:dijkstra求单源最短路的题目. 只是写两遍而已,第一遍求按照路径长度求,第二遍按照时间最少求. 另外加一个vector路径的判断 ...

最新文章

  1. CodeForces - 55D Beautiful numbers
  2. 手动写个类似的Spring MVC框架试试
  3. 【华科考研机试题】最长最短文本
  4. java实现ftp文件的上传与下载
  5. python测试代码运行时间_python测量代码运行时间方法
  6. wince下获取mac地址的简单方法!
  7. redis本地服务启动和桌面客户端安装(Windows)
  8. amtemu v0.9.2下载_悦剪辑安卓版下载-悦剪辑app下载v2.2
  9. mysql结构改写为hbase表_根据mysql表中字段创建hbase表
  10. 学习打卡-2018/08/13
  11. c语言贪吃蛇毕业论文,毕业论文c语言贪吃蛇
  12. 矩阵分析与应用学习总结目录
  13. 海量数据搜索——搜索引擎
  14. 为什么大厂程序员的另一半全职太太比例特别多?
  15. 【Android】DatePicker时间选择器
  16. TSMaster1.4.2补丁包发布
  17. 社会调查报告包括哪几个部分?
  18. 第43届ACM icpc亚洲区域赛焦作站感想
  19. 邮政收件箱界面html,时尚邮件收件箱UI设计效果
  20. 阶段式软件研发项目管理工具

热门文章

  1. PHP中不用第三个变量交换两个变量的值
  2. IOS消息机制-委托(ptotocol与delegate)
  3. 有备无患的Linux操作系统备份方法
  4. 苯环的神经网络C6H6
  5. php普通索引和唯一索引,MySQL中普通索引和唯一索引的区别详解
  6. php判断有没有分页,php分页怎么判断已经到了最后一页?
  7. 第二章 单变量线性回归-机器学习老师板书-斯坦福吴恩达教授
  8. linux下SVN配置笔记(转)
  9. 类和对象—对象特性—拷贝构造函数调用时期
  10. 【arduino】arduino ISP下载程序方法,用arduino uno给arduino nano下载程序