UVa 11374 机场快线
https://vjudge.net/problem/UVA-11374
题意:
机场快线分为经济线和商业线两种,线路、速度和价格都不同。你有一张商业线车票,可以坐一站商业线,而其他时候只能乘坐经济线。你的任务是找一条去机场最快的线路。
思路:
因为商业线只能坐一站,所有可以枚举坐的是哪一站,用dijkstra算出起点到每个点的最短时间f(x)和终点到每个点的最短时间g(x),则总时间为f(a)+T(a,b)+g(b),其中T(a,b)为从a坐一站商业线到达b的时间。
1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <vector> 5 #include <queue> 6 using namespace std; 7 8 const int INF = 1000000000; 9 const int maxn = 500 + 5; 10 11 struct Edge 12 { 13 int from, to, dist; 14 Edge(int u, int v, int d) :from(u), to(v), dist(d){} 15 }; 16 17 struct HeapNode 18 { 19 int d, u; 20 HeapNode(int x, int y) :d(x), u(y){} 21 bool operator < (const HeapNode& rhs) const{ 22 return d > rhs.d; 23 } 24 }; 25 26 struct Dijkstra 27 { 28 int n, m; //点数和边数 29 vector<Edge> edges; //边列表 30 vector<int> G[maxn]; //每个结点出发的边编号(从0开始编号) 31 bool done[maxn]; //是否已永久标号 32 int d[maxn]; //s到各个点的距离 33 int p[maxn]; //最短路中的上一条边 34 35 void init(int n) 36 { 37 this->n = n; 38 for (int i = 0; i < n; i++) G[i].clear(); 39 edges.clear(); 40 } 41 42 void AddEdges(int from, int to, int dist) 43 { 44 edges.push_back(Edge(from,to,dist)); 45 m = edges.size(); 46 G[from].push_back((m - 1)); 47 } 48 49 void dijkstra(int s) 50 { 51 priority_queue<HeapNode> Q; 52 for (int i = 0; i < n; i++) d[i] = INF; 53 d[s] = 0; 54 memset(done, 0, sizeof(done)); 55 Q.push(HeapNode(0,s)); 56 while (!Q.empty()) 57 { 58 HeapNode x = Q.top(); Q.pop(); 59 int u = x.u; 60 if (done[u]) continue; 61 done[u] = true; 62 for (int i = 0; i < G[u].size(); i++) 63 { 64 Edge& e = edges[G[u][i]]; 65 if (d[e.to] > d[u] + e.dist) 66 { 67 d[e.to] = d[u] + e.dist; 68 p[e.to] = e.from; 69 Q.push(HeapNode(d[e.to],e.to)); 70 } 71 } 72 } 73 } 74 75 void getpath(int s, int e, vector<int>& path) 76 { 77 int pos = e; 78 while (true) 79 { 80 path.push_back(pos); 81 if (pos == s) 82 break; 83 pos = p[pos]; 84 } 85 } 86 87 }t[2]; 88 89 int N, S, E; 90 vector<int> path; 91 92 int main() 93 { 94 //freopen("D:\\input.txt", "r", stdin); 95 int time, kase = 0; 96 while (scanf("%d%d%d", &N, &S, &E) != EOF) 97 { 98 S--; E--; 99 if (kase != 0) printf("\n"); 100 kase++; 101 t[0].init(N); 102 t[1].init(N); 103 path.clear(); 104 int M, K; 105 int u, v, d; 106 scanf("%d", &M); 107 while (M--) 108 { 109 scanf("%d%d%d", &u, &v, &d); 110 u--; v--; 111 t[0].AddEdges(u, v, d); 112 t[1].AddEdges(u, v, d); 113 t[0].AddEdges(v, u, d); 114 t[1].AddEdges(v, u, d); 115 } 116 t[0].dijkstra(S); 117 t[1].dijkstra(E); 118 int ks = -1, ke = -1; 119 time = t[0].d[E]; 120 scanf("%d", &K); 121 while (K--) 122 { 123 scanf("%d%d%d", &u, &v, &d); 124 u--;v--; 125 if (d + t[0].d[u] + t[1].d[v] < time){ 126 time = d + t[0].d[u] + t[1].d[v]; 127 ks = u; ke = v; 128 } 129 if (d + t[0].d[v] + t[1].d[u] < time){ 130 time = d + t[0].d[v] + t[1].d[u]; 131 ks = v; ke = u; 132 } 133 } 134 if (ks == -1) 135 { 136 t[0].getpath(S, E, path); 137 reverse(path.begin(), path.end()); 138 for (int i = 0; i < path.size() - 1; i++) 139 printf("%d ", path[i]+1); 140 printf("%d\n", E+1); 141 printf("Ticket Not Used\n"); 142 printf("%d\n", time); 143 } 144 else 145 { 146 t[0].getpath(S, ks, path); 147 reverse(path.begin(), path.end()); 148 t[1].getpath(E, ke, path); 149 for (int i = 0; i < path.size() - 1; i++) 150 printf("%d ", path[i]+1 ); 151 printf("%d\n", E+1); 152 printf("%d\n", ks + 1); 153 printf("%d\n", time); 154 } 155 } 156 return 0; 157 }
转载于:https://www.cnblogs.com/zyb993963526/p/6663953.html
UVa 11374 机场快线相关推荐
- Uva 11374 - Airport Express(枚举+最短路)
题目链接 https://vjudge.net/problem/UVA-11374 [题意] 市民从市区去机场要走机场快线,机场快线分为经济线和商业线两种,你只有一张商业线车票,只能坐一站商业线,其它 ...
- uva 11374(Dijkstra) HappyNewYear!!!
2013年最后一题,也是最后一篇随笔~祝大家新年快乐! 题意:在一张无向图中, 有两种公交线路,快线和慢线.现在有一个人想要从s->e但是他只有一张快线车票.所以快线只能乘坐一次,慢线可以随便乘 ...
- UVa 11374 - Airport Express
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 珠海到各大机场的线路
珠海到各大机场的线路 往珠海机场 一.207路公交车 香洲总站----珠海机场:6:20-18:40 珠海机场----香洲总站:6:40-19:00 车程:全程约1:40分钟,每隔24分钟一班次 ...
- 与北京相比较而言,杭州能不能挺进“一线”,还得看未来科技城---云城,第二机场入住云城周边是神助攻
杭州第二机场选址的三个备选方案仁和.瓶窑.塘栖中选择瓶窑的理由.元芳,你怎么看? 关于杭州将往哪去?未来到底是拥江一家独大,还是武林.湖滨重生?亦或是城西崛起?三国争霸,短期内注定是拥江和城西齐头并进 ...
- 香港机场到市区,更方便更便宜的路线
第一次去香港,按照网络上的攻略提前购买了八达通,一下飞机就直接去做机场快线,从机场到青衣,就一站,扣费66,我的天啊,这么贵,,接下来又换成了两条地铁线,最后在油麻地出战,竟然莫名的没有扣费,一直费解 ...
- 主板噪音测试软件,工作噪音测试 - 三英战吕布?四款300元热门电源横评 - 超能网...
◆ 工作噪音测试(Operation Noise Test) 噪音的标准是根据听力正常的人能听到的最小声音而定,0分贝为刚好能听到的声音,每增加10分贝等于强度增强10倍,增加20.30分贝则为100 ...
- 算法竞赛入门经典 写题笔记(第五章 图论算法与模型2)
本节内容-- 2-SAT dijstra算法的一些应用 SPFA算法的一些应用 例题9 飞机调度 有n架飞机需要着陆.每架飞机都可以选择"早着陆"和"晚着陆"两 ...
- 超励志!从中专生到教授,他32岁成为国家杰青!
出身,背景对一个人重要吗?重要,但今天的主人公至少告诉我们,这绝不应该成为阻碍你优秀的理由. >>>> 上世纪90年代,东北一家工厂内,一位工人正在机床旁读书.书本上沾满了机床 ...
最新文章
- 【bzoj2460】[BeiJing2011]元素 贪心+高斯消元求线性基
- python图形界面教程_图形教程
- 计算机卡在无法显示网页,我的电脑上网上银行一直“无法显示网页”
- linux的驱动开发——设备号
- 人工智能与大数据的完美结合 1
- esp8266原理图_ESP8266_22基于自身ADC的电压采样
- Strust2 本地化/国际化
- 【OpenCV】图像旋转详解,边缘用黑色填充
- 我国常用的微型计算机是,2013云南省全国计算机等级考试二级笔试试卷VB理论考试试题及答案...
- Linq to xml修改CDATA节点值
- 《深入浅出数据分析》读后详解
- 彗星撞地球-Warez组织的经典力作(15G动画压缩成64Kb的那个,2004年的第一名)
- 雷电模拟器android文件夹在哪,雷电安卓模拟器共享文件怎么用?电脑文件与模拟器互通图文教程...
- Php替换公众号图片替换,公众号文章发布后可以替换图片吗?公众号发出去的图片怎么替换?...
- ESP32内部ADC最大采样率真的能达到2MSPS吗?答案是不能。
- deepin系统更新node
- 使用watermark.js给HTML、Word、PPT、Excel等添加水印
- linux系统解压缩命令大全
- 教师节祝福语太单调?来用PaddleHub生成独家祝福语
- boll指标(布林带)计算公式
热门文章
- Mathematics for Computer Graphics
- /hbase/WALs/desktop,xxxxxxxx-splitting is non empty: Directory is not empty
- kaggle删除自己的数据集
- Semaphore用法
- 复制的时候提示下标越界_移动硬盘打不开提示格式化怎么办?
- Hadoop, Hbase
- 【机器学习】传统目标检测算法之DPM
- 17:附近最大的城市
- 一个nuxt(vue)+mongoose全栈项目聊聊我粗浅的项目架构
- Python 使用 itchat+pillow 实现微信消息自动回复