Title

Input

Output

样例
input
4 1 4
4
1 2 2
1 3 3
2 4 4
3 4 5
1
2 4 3
output
1 2 4
2
5

分析

  • 给定起点S和终点S,分别求出起点和终点到各个点的花费,存储在disS和disE。
  • 枚举每一条商业线(u,v,w),则如果使用这条商业线,最小花费为min(disS[u]+dis[v]+w, disE[u]+disS[v]+w)。找出使用一条商业线的最小花费。
  • 使用商业线的最小花费与不使用商业线的最小花费作比较,谁小取谁。
  • 在求取起点和终点到各个距离的花费,使用的是dijkstra。
  • 有可能必须需要一条商业线才能到达,这种情况下,不添加商业线时,起点和终点不连通 ,互不相通的点花费为无穷,枚举商业线的时候也能选到在加上商业线后最小的花费。
    总结
    写代码的时候,写的是while(scanf())导致一直runtime error,/(ㄒoㄒ)/~~。
    注意在枚举商业线(u,v,w)时,如果判断得到的最小花费是disS[u]+dis[v]+w,则该商业线记为(u,v)。若选用的是disE[u]+disS[v]+w,则记录的为(v,u),因为是从终点方向来的。
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
#define rangeEdge 2000+10
#define maxW 100000000
#define range 500+10
struct qNode
{int first;int second;qNode(int f = 0, int s = 0){first = f;second = s;}bool operator<(const qNode& b)const{return first > b.first;}
};
struct Edge {int v, w, nxt;Edge(int tv, int tw, int tnxt){v = tv; w = tw; nxt = tnxt;}Edge(){v = 0; w = 0; nxt = 0;}
};
int ecoNum = 0, N = 0, S = 0, E = 0, M = 0, K = 0, flag = 0;
int ecohead[range], vis[range], disS[range], disE[range], preS[range], preE[range];
Edge eco[rangeEdge];
void addeco(int tu, int tv, int tw)
{eco[ecoNum].v = tv; eco[ecoNum].w = tw; eco[ecoNum].nxt = ecohead[tu];ecohead[tu] = ecoNum;ecoNum++;
}
void dijkstra(int s, int* dis, int* pre)
{priority_queue<qNode> q;for (int i = 0; i < range; i++){dis[i] = maxW;vis[i] = 0;pre[i] = 0;}dis[s] = 0;pre[s] = -1;q.push(qNode(0, s));while (!q.empty()){int now = q.top().second;q.pop();if (vis[now]) continue;vis[now] = 1;for (int i = ecohead[now]; i != -1; i = eco[i].nxt){int next = eco[i].v, w = eco[i].w;if (dis[next] > dis[now] + w){dis[next] = dis[now] + w;pre[next] = now;q.push(qNode(dis[next], next));}}}
}void outputS(int x)
{if (x == S){printf("%d", x);return;}outputS(preS[x]);printf(" %d", x);
}
void outputE(int x)
{while (x != E){printf(" %d", x);x = preE[x];}printf(" %d", x);
}
int main()
{while (scanf("%d %d %d", &N, &S, &E)!=EOF){ecoNum = 0;int tempu = 0, tempv = 0, tempw = 0;memset(ecohead, -1, sizeof(ecohead));scanf("%d", &M);while (M--){scanf("%d %d %d", &tempu, &tempv, &tempw);addeco(tempu, tempv, tempw);addeco(tempv, tempu, tempw);}dijkstra(S, disS, preS);dijkstra(E, disE, preE);scanf("%d", &K);int busa = -1, busb = -1, mindis = disS[E];while (K--){int u = 0, v = 0, w = 0;scanf("%d %d %d", &u, &v, &w);int d1 = disS[u] + disE[v] + w;int d2 = disE[u] + disS[v] + w;if (mindis > d1){mindis = d1;busa = u; busb = v;}if (mindis > d2){mindis = d2;busa = v; busb = u;}}if (flag > 0) printf("\n");if (busa == -1)//没有用商业线{outputS(E);printf("\nTicket Not Used\n");printf("%d\n", mindis);}else{outputS(busa);//S-busaoutputE(busb);//busb-Eprintf("\n%d\n%d\n", busa, mindis);}flag++;}return 0;
}

week7 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. 自动生成低精度深度学习算子
  2. C# DataGridView 的UserDeletingRow事件,删除
  3. 去除inline-block元素间间距,比较靠谱的两种办法
  4. 1000+高质量数据集免费高速下载!一个好用又丰富的AI公开数据集平台
  5. mysql中约束_【MySQL】:MySQL中四大约束
  6. Windows2003 企业版 + Sql Server2005手工调整数据库服务器内存
  7. USACO-Section2.1 Sorting a Three-Valued Sequence(排序)
  8. 匿名管道和pipe函数
  9. find命令 文件名后缀
  10. PAT乙级1028 人口普查 (20 分)
  11. monggodb和MySQL同步问题_monggoDB添加到windows服务
  12. webpack最新版本_【每日面经】字节跳动、美团点评、360最新面经速递!
  13. Ubuntu下mysql可视化_ubuntu上mysql有可视化界面吗 ubuntu mysql 图形界面
  14. c语言编程a4988驱动步进电机,A4988驱动NEMA步进电机(42步进电机)
  15. 11.3 帧中继基本配置
  16. 2567 HDU 寻梦
  17. java写ansi_java实现utf8转换ansi
  18. 常见噪声及其消除的方式
  19. Archlinux安装yaourt
  20. 输入一个大写英文字母,输出小写英文字母;输入一个小写英文字母输出一个大写英文字母

热门文章

  1. 或有事项会计处理研究 ——以广西上市公司为例
  2. MyBioSource STMN1 elisa 试剂盒解决方案
  3. R语言爬虫 电影票房-艺恩网
  4. 特殊符号大全复制_王者荣耀名字特殊符号2019 稀有漂亮最新热门符号大全
  5. 问题驱动,提出问题,发现问题,解决问题
  6. 张家界计算机网络系统安装工程公司,[图文]吉首大学张家界学院网络建设案例...
  7. 计算机硬盘用u盘维修,电脑维修:U盘和移动硬盘及固态硬盘的区别
  8. 最难忘的一节计算机课,难忘的一堂课作文(共10篇)
  9. 冰汽朋克侦查机器人_冰汽时代困难难度机器人流玩法心得 寒霜朋克困难难度怎么玩...
  10. 怎么用电脑把mp4格式转换成mp3格式