【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解
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行最短题解相关推荐
- 7-2 天梯地图 (30分)_「月夜枫YYF」不会吧不会吧,枫哥失守8000分阵地!
最近国服的万分大神是越来越多了.就在昨天晚上VG战队的中单选手Ori赢下了渡劫局,成功站上10000分大关. 新赛季VG走了皮鞋拒绝者两员大将,然而队伍状态和实力并未有丝毫下滑,之前的深渊联赛S3总决 ...
- 【CCCC】L3-005 垃圾箱分布 (30分),Dijkstra跑n遍 = 多源最短路,emm
problem L3-005 垃圾箱分布 (30分) 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住.所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每 ...
- 重返天梯-L3-028 森森旅游 (30 分) (堆优化dijkstra+multiset)
题目描述 重返天梯-L3-028 森森旅游 (30 分)原题链接 森森决定从 1 号城市出发,到 n 号城市去.他打算在出发前准备一些现金,并在途中的某个城市将剩余现金 全部 换成旅游金后继续旅游,直 ...
- 【CCCC】L3-022 地铁一日游 (30分),floyd+大模拟
problem L3-022 地铁一日游 (30分) 森森喜欢坐地铁.这个假期,他终于来到了传说中的地铁之城--魔都,打算好好过一把坐地铁的瘾! 魔都地铁的计价规则是:起步价 2 元,出发站与到达站的 ...
- 【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序
problem L3-017 森森快递 (30分) 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由 ...
- 【CCCC】L3-015 球队“食物链” (30分),搜索排列
problem L3-015 球队"食物链" (30分) 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结 ...
- 【CCCC】L3-004 肿瘤诊断 (30分),三维BFS
problem L3-004 肿瘤诊断 (30分) 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M ...
- 【CCCC】L3-001 凑零钱 (30分),,01背包路径打印
problem L3-001 凑零钱 (30分) 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 ...
- 【CCCC】L3-008 喊山 (30分),BFS搜索最长路,水题
problem L3-008 喊山 (30分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中 ...
最新文章
- 第19件事 财务分析
- ClassNotFoundException和NoClassDefFoundError的区别
- 解决端口出现err-disabled问题
- 天池 O2O 优惠券使用预测思路解析与代码实战
- 郑州商品交易所与阿里云达成合作,推进核心数据分析平台建设
- android studio的 jar导入问题 ‘Android Studio Failed to Create MD5 hash for file’
- Arm公布2019年物联网领域五大预测:智能家居、智慧城市、医疗保健上榜
- python 构建来源gis_Python语言在ArcGIS环境中的应用.pptx
- 数字电路实验四选一数据选择器行为级模型
- mac 程序员装机必备 一篇齐全
- 4. Python--Scipy库(上/1-6)
- Windows 10 打印机驱动安装(以惠普M136 MFP为例)
- 逻辑回归算法原理及用于解决多分类问题
- PostgreSQL数据库概述
- Kafka:High level consumer vs. Low level consumer
- ip中继对接_【关关闯关】AR和Cisco 2900通过SIP IP中继对接案例
- html怎么设置视频不能快进,【浏览器插件】Video Speed Controller – 网页视频倍速、快进、回放功能0.07~16 倍...
- 窗口透明化 AlphaBlend
- Windows 标准控件 ComboBox 的改造
- Xcon北京黑客大会明天开幕
热门文章
- 面向对象——类设计(二)
- 联合索引会创建几个索引_联合索引在B+树上的存储结构及数据查找方式
- java布尔三目运算符_Java关系运算符,boolean运算符,三元运算符
- python语言入门t_Python基础学习
- vb还是python强大-最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...
- python代码-你见过哪些令你瞠目结舌的 Python 代码技巧?
- python画3d图-Python 竟能绘制如此酷炫的三维图
- 你都用python来做什么-你都用Python来做什么?看看网友们的各种牛X操作
- python和java哪个好找工作-Python和java哪个就业前景好些?
- 廖雪峰python教程-Python简介