Week7 B - TT 的旅行日记
众所周知,TT 有一只魔法猫。

今天他在 B 站上开启了一次旅行直播,记录他与魔法猫在喵星旅游时的奇遇。 TT 从家里出发,准备乘坐猫猫快线前往喵星机场。猫猫快线分为经济线和商业线两种,它们的速度与价钱都不同。当然啦,商业线要比经济线贵,TT 平常只能坐经济线,但是今天 TT 的魔法猫变出了一张商业线车票,可以坐一站商业线。假设 TT 换乘的时间忽略不计,请你帮 TT 找到一条去喵星机场最快的线路,不然就要误机了!

输入
输入包含多组数据。每组数据第一行为 3 个整数 N, S 和 E (2 ≤ N ≤ 500, 1 ≤ S, E ≤ 100),即猫猫快线中的车站总数,起点和终点(即喵星机场所在站)编号。

下一行包含一个整数 M (1 ≤ M ≤ 1000),即经济线的路段条数。

接下来有 M 行,每行 3 个整数 X, Y, Z (1 ≤ X, Y ≤ N, 1 ≤ Z ≤ 100),表示 TT 可以乘坐经济线在车站 X 和车站 Y 之间往返,其中单程需要 Z 分钟。

下一行为商业线的路段条数 K (1 ≤ K ≤ 1000)。

接下来 K 行是商业线路段的描述,格式同经济线。

所有路段都是双向的,但有可能必须使用商业车票才能到达机场。保证最优解唯一。

输出
对于每组数据,输出3行。第一行按访问顺序给出 TT 经过的各个车站(包括起点和终点),第二行是 TT 换乘商业线的车站编号(如果没有使用商业线车票,输出"Ticket Not Used",不含引号),第三行是 TT 前往喵星机场花费的总时间。

本题不忽略多余的空格和制表符,且每一组答案间要输出一个换行

输入样例

4 1 4
4
1 2 2
1 3 3
2 4 4
3 4 5
1
2 4 3

输出样例

1 2 4
2
5

解题思路
利用 dijkstra 算法求单原(权值)最短路径
但是本题有一张免费的车票
要从起点遍历一遍 求每个点到起点的距离 及最短路程
再从终点遍历一遍 求每个点到终点的距离 及最短路程
两路程分别为倒序即正序
遍历可使用车票的额外站点
从额外站点的出发站往起点遍历路程 因为出发站不一定在原先最短路程上
若从起点开始找可能会找不到 所以要倒叙查找路程
再从额外站点的到达站往终点遍历路程
若用了车票并没有比较快就不要用然后把票卖了
并直接输出正序或倒序都可以
Code

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
const int inf=5*1e8;
const int maxnu=2500;
using namespace std;
int n,s,e;
int m,k;
struct Edge{int to=0;int next=0;int v=0;
}edge[maxnu];
int head[maxnu];
int tot;
int dis[3][maxnu];
int vis[maxnu];
int fro[3][maxnu];
void add(int x,int y,int v){edge[++tot].to=y;edge[tot].next=head[x];edge[tot].v=v;head[x]=tot;
}
priority_queue<pair<int , int > >q;
void dijkstra(int s,int z,int r){while(q.size()) q.pop();memset(vis,0,sizeof(vis));//memset(fro[r],0,sizeof(fro[r]));for(int i=1;i<=n;i++){dis[z][i]=inf;}dis[z][s]=0;fro[r][s]=-1;q.push(make_pair(0,s));while(q.size()){int x=q.top().second;q.pop();if(vis[x])continue;vis[x]=1;for(int i=head[x];i;i=edge[i].next){int y=edge[i].to,v=edge[i].v;if(dis[z][y]>dis[z][x]+v){dis[z][y]=dis[z][x]+v;fro[r][edge[i].to]=x;//cout<<fro[r][y]<<endl;q.push(make_pair(-dis[z][y],y));}}}
}
void output(int x,int y){while(x!=y&&x!=0){cout<<x<<' ';x=fro[1][x]; }cout<<x;return;
}
void output2(int x,int y){if(x==y){printf("%d",y);return;}if(fro[0][y]==0){printf("%d",y);return;}if(fro[0][y]==x){printf("%d %d",x,y);return;}else{output2(x,fro[0][y]);printf(" %d",y);}
}
int main(){//ios::sync_with_stdio(false);int a,b,w;int ti=0;
while(scanf("%d %d %d",&n,&s,&e)!=EOF){cin>>m;while(m--){scanf("%d %d %d",&a,&b,&w);add(a,b,w);add(b,a,w);}dijkstra(s,0,0);dijkstra(e,1,1);//cout<<"sss"<<fro[1][1]<<endl;int ansdis=inf;int st=0,ste=0;  cin>>k;int dis1,dis2;while(k--){scanf("%d %d %d",&a,&b,&w);dis1=dis[0][a]+dis[1][b]+w;dis2=dis[0][b]+dis[1][a]+w;if(ansdis>dis1){ansdis=dis1;st=a;ste=b;}if(ansdis>dis2){ansdis=dis2;st=b;ste=a;}}if(ti>0)cout<<endl;ti++;if(ansdis>dis[0][e]){output(s,e);//output(s,e,1);cout<<endl;cout<<"Ticket Not Used"<<endl;cout<<dis[0][e]<<endl;}else{output2(s,st);cout<<' ';output(ste,e);cout<<endl;cout<<st<<endl;cout<<ansdis<<endl;}for(int i=0;i<m;i++){fro[0][i]=0;fro[1][i]=0;}memset(head,0,sizeof(head));tot=0;
}
}

Week7 B - TT 的旅行日记相关推荐

  1. SDU 程序设计思维与实践 week7 B TT 的旅行日记【Dijkstra】

    B TT 的旅行日记 题意描述 众所周知,TT 有一只魔法猫 今天他在 B 站上开启了一次旅行直播,记录他与魔法猫在喵星旅游时的奇遇. TT 从家里出发,准备乘坐猫猫快线前往喵星机场.猫猫快线分为经济 ...

  2. 【Week7作业 B】TT的旅行日记【dijkstra】

    题意: TT 从家里出发,准备乘坐猫猫快线前往喵星机场.猫猫快线分为经济线和商业线两种,它们的速度与价钱都不同.当然啦,商业线要比经济线贵,TT 平常只能坐经济线,但是今天 TT 的魔法猫变出了一张商 ...

  3. 算法-程序设计课week7-作业-B - TT 的旅行日记

    文章目录 题目 思路 路径输出 总的步骤 心得 代码 题目 众所周知,TT 有一只魔法猫. 今天他在 B 站上开启了一次旅行直播,记录他与魔法猫在喵星旅游时的奇遇. TT 从家里出发,准备乘坐猫猫快线 ...

  4. 微信小程序实战 《跨时空》旅行日记小程序

    题外话 我喜欢旅行,在正文开始前,先向有共同兴趣的朋友推荐一个自己每次出行前必装的 APP -- 面包旅行.我主要用它来写旅行日志,每天行程结束,我都会将当天拍的照片上传并做简单的文字记录,记录是回顾 ...

  5. 马卡龙色系旅行日记PPT模板-优页文档

    模板介绍 马卡龙色系旅行日记PPT模板-优页文档.一套,生活旅游,个人相册,幻灯片模板,内含青色,黄色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带来帮助,温馨提示 ...

  6. 甜酷女孩叶悠悠,邀你走进她的元宇宙旅行日记

    创世藏品 叶悠悠元宇宙旅行日记 醉美中国系列数字藏品 12月16日上午10点 百度APP[星际口袋]小程序限量发售! 她是谁? 叶悠悠是百度输入法首创推出的两位情感陪伴型虚拟博主之一,这位27岁的人间 ...

  7. 【蓝桥杯单片机的备赛旅行日记系列】之国赛决赛第五届多功能事件记录器

    目录 1.注意事项 2.部分代码展示 3.完整代码下载 1.注意事项   这是目前为止做到的最难的一套了,三个驱动都用上了,而且还增加了串口通信,最无奈的是光敏电阻和Rb2同时用上了.   ADC读取 ...

  8. 快递的旅行日记 - 深度挖掘快递物流地图轨迹查询API 的使用场景

    写在前面 全球化经济的不断发展使得快递业变得越来越重要,而快递物流地图轨迹查询 API 也因此应运而生. 该 API 可以帮助用户追踪物流信息,了解快递的运输状态,方便快递企业.个人用户以及电商平台等 ...

  9. 【20200401程序设计思维与实践 Week7作业】

    目录 A - TT 的魔法猫 题意 思路 总结 代码 B - TT 的旅行日记 题意 思路 总结 代码 C - TT 的美梦 题意 思路 总结 代码 A - TT 的魔法猫 题意 众所周知,TT 有一 ...

  10. SDU程序设计思维实践题目总结

    题目来源及链接 题目名称及讲解博客链接 涉及算法 原题以及原题链接 第二周作业 Maze BFS POJ-3984 Pour water BFS POJ-1606 第二周实验 化学 模拟 codefo ...

最新文章

  1. coreseek最大检索数只有1000的问题!
  2. 网页title上面添加图片
  3. 三人表决器逻辑表达式与非_机器学习 | 关于参数模型与非参数模型研究
  4. 第十篇 PO核心功能及流程详解
  5. XML模板解析————Dom4j解析xml案例分析
  6. javascript演变史_检查有史以来最著名JavaScript错误之一
  7. 三角形面积 java_java编程中求三角形面积肿么写?
  8. php end array_value,PHP常用处理数组函数
  9. 华为认证的好处是什么?考试费是多少?
  10. CCS 6.0 下载
  11. transform-style: preserve-3d「In CSS」
  12. 基于51单片机的超声波红外避障捡拾小车
  13. Matlba实现傅里叶变换及其逆变换
  14. Caffe中求解器(Solver)介绍
  15. OPC 救援:OPC Rescue Crack
  16. 不存在R上的连续函数f,它在无理数集R\Q上是一一映射,而在有理数集Q上不是一一映 射。
  17. 数据库之关系模型介绍
  18. 记录学习画漫画的过程~~2014.7.10(人物头像)
  19. html 图片转换成word,在Word中通过把编辑的图片另存为HTML文件实现转换图片
  20. html中的那些炫酷吊炸天的操作

热门文章

  1. [953]mongo创建索引及索引相关方法
  2. 解决:元素内容必须由格式正确的字符数据或标记组成。
  3. ubuntu 14.04 安装搜狗拼音输入法
  4. mysql rrd_时间序列数据库rrd启动
  5. JSP空间上当受骗篇
  6. Mysql(多级分销)无限极数据库表设计方法
  7. 曲率、曲率(对弧长)的导数以及曲率导数(对弧长)的导数的计算
  8. 面试准备:简历中项目剖析
  9. 今天花了点时间详细了解了一下WiFi
  10. 又是一年新来到,别墅翻新要趁早