【Optimal Path】星门跳跃 链表+SPFA
题目描述
在EVE游戏中,宇宙被划分成为许多区域,每个区域中都有数目不定的星门,可以通过星门来跳跃到特定的区域(星门是双向的)。
现在你正参与BBE联军与MLGBD联盟的会战,但由于飞船受损,需要尽快回到后方的友军空间站进行维护。
试编写程序,计算出所须的最短的返回空间站时间。
为了简化问题,我们约定飞船所在的位置为区域1,空间站所在的位置为区域N。
问题规模:
对于80%的数据,1<N<=10000,1<M<50000;
对于100%的数据,1<N<=30000,1<M<150000,1<=X[],Y[]<=N,1<=Z[]<=4096;
输入格式
第1行,两个整数N,M,分别为区域的总数和星门的总数;
第2..M+1行,每行三个整数X[i],Y[i],Z[i],分别为星门连接的两个区域,以及跳跃所需时间;
输出格式
一个整数,返回空间站所需的最短时间。
样例输入
样例一
5 3
1 4 5
4 5 1
1 2 7
样例二
10 11
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9
8 9 10
9 10 11
1 5 7
6 9 3
样例输出
样例一
6
样例二
28
最短路的题……
提交情况……N次90分最后发现是队列开小了……贴代码……王哥教导版本的……打算以后学王哥的链表了……
代码如下
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <string>const int maxN = 150010, _SIZE = 0xffff;
struct Edge
{int u, v, d; Edge *next; Edge() {}Edge(int v, int d, Edge *next):v(v), d(d), next(next) {}
} *edge[maxN]; bool marked[30002];
int q[10000000], dist[30002], n, m, S, T;inline void Ins(int u, int v, int d)
{edge[u] = new Edge(v, d, edge[u]);edge[v] = new Edge(u, d, edge[v]);return;
}inline void Spfa()
{static int f = 0, r = 0, u, v; static Edge *p;memset(dist, 0x4f, sizeof dist);for (dist[q[r++] = S] = 0, marked[S] = 1; f < r;)for (p = edge[u = q[f++]], marked[u] = 0; p; p = p -> next)if (dist[u] + p -> d < dist[v = p -> v]){dist[v] = dist[u] + p -> d;if (!marked[v]) marked[q[r++] = v] = 1;}return;
}int main()
{scanf("%d%d", &n, &m);while (m--){int u, v, d; scanf("%d%d%d", &u, &v, &d);Ins(u, v, d);}//scanf("%d%d", &S, &T);S = 1, T = n; Spfa();printf("%d\n", dist[T]);return 0;
}
【Optimal Path】星门跳跃 链表+SPFA相关推荐
- ACM算法--spfa算法--最短路算法
求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm. SPFA算法是西南交通大学段凡丁于1994年发表的. 从名字我们就可以看出,这种算 ...
- 1131. Subway Map (30)-PAT甲级真题 (DFS or 堆优化dij or SPFA)
题意 给出地铁线路数n,分别给出每条线的站点数m,再依次列出站点id.然后询问k次从启点sv到终点ev的最短路径,如果最短路径相同,要求换乘最少的路径.最后按条件输出. 思路 1.用unordered ...
- 最短路径(SPFA算法)
1200: 小明的难题 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 363 Solved: 103 [Submit][Status][Web Boar ...
- mongodb 存储过程 遍历表数据_三、redis数据存储之跳跃表(SKIP LIST)
导读 前面文章[一.深入理解redis之需要掌握的知识点 ]中,我们对redis需要学习的内容框架进行了一个梳理.[二.redis中String和List两种数据类型和应用场景 ].[二.redis中 ...
- 跳跃表原理及redis跳跃表的应用
跳跃表的实现还是一个链表,是一个有序的链表,在遍历的时候基于比较,但普通链表只能遍历,跳跃表加入了一个层(也叫索引)的概念,层数越高的元素越少,每次先从高层查找,再逐渐降层,直到找到合适的位置.从图中 ...
- Linux内核4.14版本——alsa框架分析(11)——DAPM(2)——widget、route和path的概念
目录 1. DAPM的基本单元:widget(struct snd_soc_dapm_widget) 2. widget的种类 3. widget之间的连接器:path(struct snd_soc ...
- 三、redis数据存储之跳跃表(SKIP LIST)
导读 前面文章[一.深入理解redis之需要掌握的知识点 ]中,我们对redis需要学习的内容框架进行了一个梳理.[二.redis中String和List两种数据类型和应用场景 ].[二.redis中 ...
- spfa 单源最短路究极算法
学习博客链接:SPFA 求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm. SPFA算法是西南交通大学段凡丁于1994年发表的. 从名 ...
- 图论算法之最短路径(Dijkstra、Floyd、Bellman-ford和SPFA)
图论算法之最短路径(Dijkstra.Floyd.Bellman-ford和SPFA) 1.图论最短路径概述 图论算法为了求解一个顶点到另一个顶点的最短路径,即如果从图中某一顶点(称为源点)到达另一顶 ...
- 路径规划;a*算法 demo_路径规划A*算法
(做封面图片,可真是费了很长时间) 前言 路径规划涉及到很多内容. 但路径规划的起点,应该都是A*这个来自斯坦福大学算法. 说起A*,网上有很多相关的内容.各种博客,各种解释. 但是我愣是没看明白. ...
最新文章
- 微信公众号网页获取用户信息
- 美学心得(第一百九十四集)罗国正
- Linux通过XAMPP集成软件包搭建LAMPP环境
- 英语写作中常见语法总结(二)
- emacs 新手笔记(四) —— 使用 dired 完成一些简单的文件和目录操作
- div不随滚动条左右移动而改变位置
- Java中的Volatile如何工作? Java中的volatile关键字示例
- python win10 连接hive_使用win10+python3.5+impyla 连接大数据平台hive表的步骤与问题解决...
- java 多队列_java多线程实现简单队列
- Storm概念学习系列之Task任务
- python colorbar位置大小调整_python - matplotlib相邻子图:添加colorbar更改子图的大小 - 堆栈内存溢出...
- Ubuntu PPPOE拨号
- 【转载+整理】EJB(三) EJB分层架构
- python学习之——假人配对
- MySQL中 begin 事务 begin ,第二个begin带自动提交功能???
- 【100%通过率】华为OD机试真题 Java 实现【处理器问题/ 高性能AI处理器】【2022.11 Q4 新题】
- 史上最全的CDN内容分发网络实战技巧(网络优化)
- 【机器学习】线性回归,多元线性回归、自回归及衡量指标
- 重读《大数据时代》:关于大数据的再认识
- html js音乐歌词滚动,如何用html+js实现音乐歌词同步播放器