加了一些花的最短路,点的个数为500不需要堆优化,改一下dij的判断条件就可以了。

上代码:

  1. #include <iostream>
  2. #include <cstring>
  3. #include <string>
  4. #include <cstdio>
  5. #include <vector>
  6. #include <algorithm>
  7. using namespace std;
  8. const int maxn=;
  9. const int inf=0x3f3f3f3f;
  10.  
  11. struct node
  12. {
  13. int id;
  14. int cost;
  15. int time;
  16. };
  17.  
  18. int s,e;
  19. int n,m;
  20. vector<int> line0;
  21. vector<int> line1;
  22. vector<node> edge[maxn];
  23. int d0[maxn];
  24. int d1[maxn];
  25.  
  26. void build_map()
  27. {
  28. int v1,v2,ow,cost,time;
  29. scanf("%d %d %d %d %d",&v1,&v2,&ow,&cost,&time);
  30. node temp;
  31. temp.cost=cost;
  32. temp.time=time;
  33. temp.id=v2;
  34. edge[v1].push_back(temp);
  35. if(ow==)
  36. {
  37. temp.id=v1;
  38. edge[v2].push_back(temp);
  39. }
  40. }
  41.  
  42. void dij0() // deug
  43. {
  44. int vis[maxn];
  45. int pre[maxn];
  46. int cost[maxn];
  47. cost[s]=;
  48. pre[s]=-;
  49. memset(vis,,sizeof(vis));
  50. for(int i=;i<=n;i++) d0[i]=inf;
  51. d0[s]=;
  52. while()
  53. {
  54. int v=-;
  55. for(int i=;i<=n;i++)
  56. {
  57. if(vis[i]== && ( v==- || d0[v] > d0[i])) v=i;
  58. }
  59. if(v==-) break;
  60. vis[v]=;
  61. int len=edge[v].size();
  62. for(int i=;i<len;i++)
  63. {
  64. node temp=edge[v][i];
  65. if(vis[temp.id] == )
  66. {
  67. if(d0[temp.id] > d0[v]+temp.time )
  68. {
  69. d0[temp.id]=d0[v]+temp.time; //
  70. pre[temp.id]=v;
  71. cost[temp.id]=cost[v]+temp.cost;
  72. }
  73. else if(d0[temp.id] == d0[v]+temp.time)
  74. {
  75. if(cost[temp.id] > cost[v]+temp.cost)
  76. {
  77. cost[temp.id]=cost[v]+temp.cost;
  78. pre[temp.id]=v;
  79. }
  80. }
  81.  
  82. }
  83. }
  84. }
  85. // cout<<"1"<<endl;
  86. int zz=e;
  87. line0.push_back(e);
  88. while(pre[zz]!=-) //
  89. {
  90. line0.push_back(pre[zz]);
  91. zz=pre[zz];
  92. // cout<<zz<<endl;
  93. }
  94. //cout<<"2"<<endl;
  95.  
  96. reverse(line0.begin(),line0.end());
  97. }
  98.  
  99. void dij1() // deug
  100. {
  101. int vis[maxn];
  102. int pre[maxn];
  103. int cost[maxn];
  104. cost[s]=;
  105. pre[s]=-;
  106. memset(vis,,sizeof(vis));
  107. // vis[s]=1;
  108. for(int i=;i<=n;i++) d1[i]=inf;
  109. d1[s]=;
  110. while()
  111. {
  112. int v=-;
  113. for(int i=;i<=n;i++)
  114. {
  115. if(vis[i]== && (v==- || d1[v] > d1[i])) v=i;
  116. }
  117. if(v==-) break;
  118. vis[v]=;
  119. // line1.push_back(v);
  120. int len=edge[v].size();
  121. for(int i=;i<len;i++)
  122. {
  123. node temp=edge[v][i];
  124. if(vis[temp.id]==)
  125. {
  126. if(d1[temp.id] > d1[v]+temp.cost)
  127. {
  128. d1[temp.id]=d1[v]+temp.cost; //
  129. pre[temp.id]=v;
  130. cost[temp.id]=cost[v]+;
  131. }
  132. else if(d1[temp.id] == d1[v]+temp.cost)
  133. {
  134. if(cost[temp.id] > cost[v]+)
  135. {
  136. cost[temp.id]=cost[v]+;
  137. pre[temp.id]=v;
  138. }
  139. }
  140. }
  141.  
  142. }
  143. }
  144.  
  145. int zz=e; // route
  146. line1.push_back(e);
  147. while(pre[zz]!=-)
  148. {
  149. line1.push_back(pre[zz]);
  150. zz=pre[zz];
  151. }
  152.  
  153. reverse(line1.begin(),line1.end());
  154. }
  155. int check()
  156. {
  157. int len1=line1.size();
  158. int len0=line0.size();
  159. if(len1 != len0) return ;
  160. for(int i=;i<len1;i++)
  161. {
  162. if(line0[i] != line1[i]) return ;
  163. }
  164. return -;
  165. }
  166.  
  167. int main()
  168. {
  169. cin>>n>>m;
  170. while(m--) build_map();
  171. cin>>s>>e;
  172. dij0();// 0 refers to the shortest time
  173. dij1();// 1 refers to the shortset cost
  174. if(check() == ) // diff
  175. {
  176. printf("Time = %d: ",d0[e]);
  177. cout<<line0[];
  178. for(int i=;i<line0.size();i++) cout<<" => "<<line0[i];
  179. cout<<endl;
  180.  
  181. printf("Distance = %d: ",d1[e]);
  182. cout<<line1[];
  183. for(int i=;i<line1.size();i++) cout<<" => "<<line1[i];
  184. cout<<endl;
  185. }
  186. else
  187. {
  188. printf("Time = %d; ",d0[e]);
  189. printf("Distance = %d: ",d1[e]);
  190. cout<<line1[];
  191. for(int i=;i<line1.size();i++) cout<<" => "<<line1[i];
  192. cout<<endl;
  193. }
  194. return ;
  195. }

pat天梯赛练习集合 L3-007 天梯地图的更多相关文章

  1. PAT 天梯赛 L2-005 集合相似度

    set的应用 题目链接 题解 有点像集合的交并操作,直接利用set进行处理,因为set有去重的功能,而且set是利用红黑树实现的,查找速度快O(logN). 代码如下: #include<cst ...

  2. PAT天梯赛L2-005 集合相似度

    题目链接:点击打开链接 给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你的任务就是计算任意一对给定集合的 ...

  3. PAT 天梯赛 L2-005. 集合相似度 【SET】

    题目链接 https://www.patest.cn/contests/gplt/L2-005 思路 因为集合中的元素 是不重复的 所以用SET 来保存 集合 然后最后 查找一下 两个集合中共有元素 ...

  4. 天梯赛 L2-005 集合相似度 (set容器)

    给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你的任务就是计算任意一对给定集合的相似度. 输入格式: 输 ...

  5. 天梯赛 - L2-005 集合相似度

    题目链接:https://www.patest.cn/contests/gplt/L2-005 这个题理解是个大问题啊,“给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合 ...

  6. PAT天梯赛 L1-049 天梯赛座位分配

    题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...

  7. PAT L1 049 天梯赛座位分配

    天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...

  8. PAT天梯赛L3-007 天梯地图

    题目链接:点击打开链接 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至 ...

  9. pat 团体天梯赛 L3-007. 天梯地图

    L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...

随机推荐

  1. PEP 476 -- Enabling certificate verification by default for stdlib http clients

    SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate ch ...

  2. nginx报警:nginx: [warn] could not build optimal server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 64; ignoring server_names_hash_bucket_size

    date: 2019-08-12   16:33:05 author: headsen chen notice :个人原创 告警现象:   解决办法:在http的部分添加hash缓冲值 测试:如下图, ...

  3. js 解析 JSON 数据

    JSON 数据如下: { "name": "mkyong", , "address": { "streetAddress" ...

  4. Linux系统的关机、重启、睡眠

    一.关机.重启前的准备1.查看网络联机状态.后台可执行程序 查看一下两样东西,可以让你稍微了解主机目前的使用状态 查看网络联机状态:netstat  -a查看后台执行的程序:ps  -aux2.数据同 ...

  5. 【Mybatis】MyBatis之配置多数据源(十)

    在做项目的过程中,有时候一个数据源是不够,那么就需要配置多个数据源.本例介绍mybatis多数据源配置 前言 一般项目单数据源,使用流程如下: 单个数据源绑定给sessionFactory,再在Dao ...

  6. 单独使用MyBatis的简单示例

    单独使用MyBatis的简单示例:mybaties-config.xml:MyBatis配置文件 <?xml version="1.0" encoding="UTF ...

  7. 【Leetcode_easy】1030. Matrix Cells in Distance Order

    problem 1030. Matrix Cells in Distance Order 参考 1. Leetcode_easy_1030. Matrix Cells in Distance Orde ...

  8. upload-labs 上传漏洞靶场环境以及writeup

    一个帮你总结所有类型的上传漏洞的靶场 https://github.com/c0ny1/upload-labs 靶场环境(基于phpstudy这个php集成环境) https://github.com ...

  9. 服务发现框架选型,Consul还是Zookeeper还是etcd

    背景 本文并不介绍服务发现的基本原理.除了一致性算法之外,其他并没有太多高深的算法,网上的资料很容易让大家明白上面是服务发现. 想直接查看结论的同学,请直接跳到文末. 目前,市面上有非常多的服务发现工 ...

  10. AMSR-E/AMSR-2数据介绍与下载

    1 AMSR-E数据介绍 The Advanced Microwave Scanning Radiometer for EOS (AMSR-E)是ADEOS-II 上的AMSR的改进版本, 是JAXA ...