https://ac.nowcoder.com/acm/contest/96/E?&headNav=www&headNav=acm

题目描述

  AA的欧尼酱qwb是个考古学家,有一天qwb发现了只白白圆圆小小的木乃伊,它是个爱哭鬼却很努力。qwb想把这么可爱的小木乃伊送给
AA,于是便找上了快递姐姐,这下可让快递姐姐犯愁了,因为去往AA家的路实在太难走了(甚至有可能没有路能走到AA家),快递姐姐
找上聪明的ACMer,想请你帮忙找出最快到达AA家的路,你行吗?

输入描述:

第一行输入两个整数n和m(2<=n<=m<=200000),分别表示有n座城市和m条路,城市编号为1~n(快递姐姐所在城市为1,AA所在城市为n)。
接下来m行,每行输入3个整数u,v,w(u,v<=n,w<=100000),分别表示城市u和城市v之间有一条长为w的路。

输出描述:

输出结果占一行,输出快递姐姐到达AA家最短需要走多远的路,如果没有路能走到AA家,则输出“qwb baka”(不用输出双引号)。

输入例子:
4 4
1 2 1
2 3 2
3 4 3
2 3 1
输出例子:
5

-->

示例1

输入

复制

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

输出

复制

5

题解:$a[i] = j$ 代表第 $i$ 条边的起点是 $j$; $b[i] = j$ 代表第 $i$ 条边的终点是 $j$; $c[i] = j$ 代表第 $i$ 条边的长度是 $j$; $nx[i]$ 代表的是第 $i$ 条边的下一条边是 $j$ 边; $h[i] = j$ 代表以 $i$ 开始的边是第 $j$ 边

代码:

#include <bits/stdc++.h>
using namespace std; long long INF = 1e18;
const int Node= 200000 + 10;
const int Edge = (200000 + 10) * 2; int n, m, s;
long long dis[Node];
int h[Node], a[Edge], b[Edge], nx[Edge], edgeCount;
long long c[Edge]; void init() {
s = 1;
edgeCount = 0; for (int i = 1; i <= n; i++) {
dis[i] = INF;
h[i] = -1;
}
dis[s] = 0;
} void add(int aa, int bb, long long cc) {
a[edgeCount] = aa;
b[edgeCount] = bb;
c[edgeCount] = cc; nx[edgeCount] = h[aa];
h[aa] = edgeCount;
edgeCount++;
} void input() {
for (int i = 1; i <= m; i++) {
int aa, bb;
long long cc;
scanf("%d%d%lld", &aa, &bb, &cc);
add(aa, bb, cc);
add(bb, aa, cc);
}
} void dijkstra() {
priority_queue<pair<long long, int>> q;
q.push(make_pair(0, s));
while (!q.empty()) {
pair<long long, int> tp = q.top();
q.pop(); int d = -tp.first;
int v = tp.second; for (int i = h[v]; i != -1; i = nx[i]) {
if (dis[v] + c[i] < dis[b[i]]) {
dis[b[i]] = dis[v] + c[i];
q.push(make_pair(-dis[b[i]], b[i]));
}
}
}
} int main() {
while (~scanf("%d%d", &n, &m)) {
if (n == 0 && m == 0) {
break;
} init();
input();
dijkstra(); if (dis[n] != INF) {
printf("%lld\n", dis[n]);
} else {
printf("qwb baka\n");
}
}
return 0;
}

  

神仙代码昨天差不多看了半天 脑阔疼 学到了

最新文章

  1. soundtouch变速wsola算法之改进
  2. Qt编程之mapx组件编程
  3. table 排序 添加 删除 等操作
  4. 创建守护进程步骤与setsid() -- linux deamon进程
  5. VC++ 将资源位图画到窗口上去的方法
  6. WPF 蒙层罩,正在加载
  7. drupal里面的ajax最粗浅的理解-流程
  8. VB.NET版机房收费系统---七仙女之系统登录
  9. ACM Fibonacci数 计算
  10. JS框架设计读书笔记之-函数
  11. 初学HTML5,你要懂得哪些?
  12. 数组、ArrayList、List、LinkedList的区别
  13. java中并发下的集合类
  14. VS2012发布网站详细步骤问题
  15. GRU and LSTM
  16. Nestjs OpenAPI(Swagger)
  17. Jordan 块的几何
  18. curl get请求
  19. Python3 - DBUtils 和 pymysql 整合
  20. opencv 图像处理函数大全

热门文章

  1. 改Chrome的User Agent,移动版网络
  2. django中介模型,CBV模型,及logging日志配制
  3. 前端jQuery之事件流
  4. 前端css之文本操作及块级元素和行内元素
  5. SQL基础语句汇总
  6. 协程实现tcp两个客户端的通讯
  7. linux面试集
  8. sql常用函数instr()和substr()
  9. linux防火墙的管理和策略控制
  10. Gson转Map时,Int会变成double解决方法