problem

L3-007 天梯地图 (30分)
本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。

输入格式:
输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息:

V1 V2 one-way length time
其中V1和V2是道路的两个端点的编号(从0到N-1);如果该道路是从V1到V2的单行线,则one-way为1,否则为0;length是道路的长度;time是通过该路所需要的时间。最后给出一对起点和终点的编号。

输出格式:
首先按下列格式输出最快到达的时间T和用节点编号表示的路线:

Time = T: 起点 => 节点1 => … => 终点
然后在下一行按下列格式输出最短距离D和用节点编号表示的路线:

Distance = D: 起点 => 节点1 => … => 终点
如果最快到达路线不唯一,则输出几条最快路线中最短的那条,题目保证这条路线是唯一的。而如果最短距离的路线不唯一,则输出途径节点数最少的那条,题目保证这条路线是唯一的。

如果这两条路线是完全一样的,则按下列格式输出:

Time = T; Distance = D: 起点 => 节点1 => … => 终点
输入样例1:
10 15
0 1 0 1 1
8 0 0 1 1
4 8 1 1 1
5 4 0 2 3
5 9 1 1 4
0 6 0 1 1
7 3 1 1 2
8 3 1 1 2
2 5 0 2 2
2 1 1 1 1
1 5 0 1 3
1 4 0 1 1
9 7 1 1 3
3 1 0 2 5
6 3 1 2 1
5 3
输出样例1:
Time = 6: 5 => 4 => 8 => 3
Distance = 3: 5 => 1 => 3
输入样例2:
7 9
0 4 1 1 1
1 6 1 3 1
2 6 1 1 1
2 5 1 2 2
3 0 0 1 1
3 1 1 3 1
3 2 1 2 1
4 5 0 2 2
6 5 1 2 1
3 5
输出样例2:
Time = 3; Distance = 4: 3 => 2 => 5

  • n个点m条边的有向图,求两次最短路,打印路径
  • 如果最快到达路线不唯一,则输出几条最快路线中最短的那条
  • 如果最短距离的路线不唯一,则输出途径节点数最少的那条

solution

  • Dijkstra+路径打印(邻接表),这不是个模板么,,看我秒他。。
  • WA2,4,这也能错?改不动了改不动了。。。
  • 找不到数据,只好重新写一个,这次把dij拆出来,路径打印换成递归(大家都这样)结果WA2
  • 原来的那个改出来了,,数据点2,4的错误地方在注释里注明了
//AC
#include<bits/stdc++.h>
using namespace std;
const int maxn = 550;int n, m, s, t;
int e[2][maxn][maxn], dist[2][maxn], vis[2][maxn], pre[2][maxn], w[2][maxn];
void Dijkstra(int rk){memset(dist[rk],0x3f,sizeof(dist[rk]));memset(vis[rk],0,sizeof(vis[rk]));memset(pre[rk],-1,sizeof(pre[rk]));dist[rk][s] = 0;for(int i = 0; i < n; i++){int u = -1, _min = 1e9;for(int j = 0; j < n; j++){if(!vis[rk][j] && dist[rk][j]<_min){_min = dist[rk][j];  u = j;}}if(u==-1)return ;vis[rk][u] = 1;for(int j = 0; j < n; j++){if(!vis[rk][j] && dist[rk][j]>dist[rk][u]+e[rk][u][j]){dist[rk][j] = dist[rk][u]+e[rk][u][j];pre[rk][j] = u;//距离if(rk==0){w[rk][j] = w[rk][u]+1;//+1?!!:WA4!!                   }//时间if(rk==1){w[rk][j] = w[rk][u]+e[!rk][u][j];//WA2!}}else if(!vis[rk][j] && dist[rk][j] == dist[rk][u]+e[rk][u][j]){//距离if(rk==0){if(w[rk][j] > w[rk][u]+1){w[rk][j] = w[rk][u]+1;pre[rk][j] = u;}}//时间if(rk==1){if(w[rk][j] > w[rk][u]+e[!rk][u][j]){w[rk][j] = w[rk][u]+e[!rk][u][j];pre[rk][j] = u;}}                }}}
}
void Print(int rk, int x){if(x==-1){return ;}else{Print(rk, pre[rk][x]);printf(" %d =>", x);}
}int main(){memset(e,0x3f,sizeof(e));cin>>n>>m;for(int i = 1; i <= m; i++){int a, b, on, le, ti;cin>>a>>b>>on>>le>>ti;if(on==1){e[0][a][b] = le;e[1][a][b] = ti;}else{e[0][a][b] = le;e[1][a][b] = ti;e[0][b][a] = le;e[1][b][a] = ti;}}cin>>s>>t;Dijkstra(0);Dijkstra(1);int ok = 1, i = pre[0][t], j = pre[1][t];while(i!=-1 && j!=-1){if(pre[0][i] != pre[0][j]){ok=0;break;}i = pre[0][i];j = pre[1][j];}if(ok){printf("Time = %d;",dist[1][t]);printf(" Distance = %d:",dist[0][t]);Print(1,pre[1][t]);printf(" %d\n",t);return 0;}printf("Time = %d:",dist[1][t]);Print(1,pre[1][t]);printf(" %d\n",t);printf("Distance = %d:",dist[0][t]);Print(0,pre[0][t]);printf(" %d",t);return 0;
}

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

  1. 7-2 天梯地图 (30分)_「月夜枫YYF」不会吧不会吧,枫哥失守8000分阵地!

    最近国服的万分大神是越来越多了.就在昨天晚上VG战队的中单选手Ori赢下了渡劫局,成功站上10000分大关. 新赛季VG走了皮鞋拒绝者两员大将,然而队伍状态和实力并未有丝毫下滑,之前的深渊联赛S3总决 ...

  2. 【CCCC】L3-005 垃圾箱分布 (30分),Dijkstra跑n遍 = 多源最短路,emm

    problem L3-005 垃圾箱分布 (30分) 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住.所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每 ...

  3. 重返天梯-L3-028 森森旅游 (30 分) (堆优化dijkstra+multiset)

    题目描述 重返天梯-L3-028 森森旅游 (30 分)原题链接 森森决定从 1 号城市出发,到 n 号城市去.他打算在出发前准备一些现金,并在途中的某个城市将剩余现金 全部 换成旅游金后继续旅游,直 ...

  4. 【CCCC】L3-022 地铁一日游 (30分),floyd+大模拟

    problem L3-022 地铁一日游 (30分) 森森喜欢坐地铁.这个假期,他终于来到了传说中的地铁之城--魔都,打算好好过一把坐地铁的瘾! 魔都地铁的计价规则是:起步价 2 元,出发站与到达站的 ...

  5. 【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序

    problem L3-017 森森快递 (30分) 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由 ...

  6. 【CCCC】L3-015 球队“食物链” (30分),搜索排列

    problem L3-015 球队"食物链" (30分) 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结 ...

  7. 【CCCC】L3-004 肿瘤诊断 (30分),三维BFS

    problem L3-004 肿瘤诊断 (30分) 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M ...

  8. 【CCCC】L3-001 凑零钱 (30分),,01背包路径打印

    problem L3-001 凑零钱 (30分) 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 ...

  9. 【CCCC】L3-008 喊山 (30分),BFS搜索最长路,水题

    problem L3-008 喊山 (30分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中 ...

最新文章

  1. 第19件事 财务分析
  2. ClassNotFoundException和NoClassDefFoundError的区别
  3. 解决端口出现err-disabled问题
  4. 天池 O2O 优惠券使用预测思路解析与代码实战
  5. 郑州商品交易所与阿里云达成合作,推进核心数据分析平台建设
  6. android studio的 jar导入问题 ‘Android Studio Failed to Create MD5 hash for file’
  7. Arm公布2019年物联网领域五大预测:智能家居、智慧城市、医疗保健上榜
  8. python 构建来源gis_Python语言在ArcGIS环境中的应用.pptx
  9. 数字电路实验四选一数据选择器行为级模型
  10. mac 程序员装机必备 一篇齐全
  11. 4. Python--Scipy库(上/1-6)
  12. Windows 10 打印机驱动安装(以惠普M136 MFP为例)
  13. 逻辑回归算法原理及用于解决多分类问题
  14. PostgreSQL数据库概述
  15. Kafka:High level consumer vs. Low level consumer
  16. ip中继对接_【关关闯关】AR和Cisco 2900通过SIP IP中继对接案例
  17. html怎么设置视频不能快进,【浏览器插件】Video Speed Controller – 网页视频倍速、快进、回放功能0.07~16 倍...
  18. 窗口透明化 AlphaBlend
  19. Windows 标准控件 ComboBox 的改造
  20. Xcon北京黑客大会明天开幕

热门文章

  1. 面向对象——类设计(二)
  2. 联合索引会创建几个索引_联合索引在B+树上的存储结构及数据查找方式
  3. java布尔三目运算符_Java关系运算符,boolean运算符,三元运算符
  4. python语言入门t_Python基础学习
  5. vb还是python强大-最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...
  6. python代码-你见过哪些令你瞠目结舌的 Python 代码技巧?
  7. python画3d图-Python 竟能绘制如此酷炫的三维图
  8. 你都用python来做什么-你都用Python来做什么?看看网友们的各种牛X操作
  9. python和java哪个好找工作-Python和java哪个就业前景好些?
  10. 廖雪峰python教程-Python简介