题目链接

本题解来源

其他链接

卡spfa的数据组

题解堆优化的dijkstra

题解spfa讲解

来自以上题解的图片来自常暗踏阴

使用前向星链表存图

直接用队列优化spfa

struct cmp
{
bool operator()(int a,int b)
{
return dist[a]>dist[b];
}
}; priority_queue<int,vector<int>,cmp> q;void dijspfa()
{
q.push(s);
memset(inq,,sizeof(inq));
memset(dist,0x7f,sizeof(dist));
dist[s]=;
while(!q.empty())
{
int u=q.top();
q.pop();inq[u]=;
for(int j=first[u];j>;j=e[j].nxt)
{
if(e[j].len+dist[u]<dist[e[j].to])
{
dist[e[j].to]=dist[u]+e[j].len;
if(inq[e[j].to]==)
{
q.push(e[j].to);inq[e[j].to]=;
}
}
}
}
}

dijspfa特性

1.判负环

spfa判负环主要用dfs,因为dfs判负环可以及时退出防止超时,

数据强化可以用bfs看下面

题解链接

dijspfa判负环继承spfa的功能

但是可能过不了233

SPjkstra算法--就是本文的dijspfa

2.与dij,spfa比较

dij的思想是堆优化后从小到大松弛,每个点只入队一次

spfa的思想是不断修改子节点,使每个点重复入队更新,因此可以判负环

时间差异就在重复入队上

完整代码

 #include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#define Mx 200001
#define Nx 100001
using namespace std;
struct edge
{
int to,nxt,len;
}e[Mx];
int first[Nx]; int n,m,s;
void addstar(int i,int u,int v,int w)
{
e[i].len=w;
e[i].nxt=first[u];
e[i].to=v;
first[u]=i;
}
int inq[Nx];
int dist[Nx]; struct cmp
{
bool operator()(int a,int b)
{
return dist[a]>dist[b];
}
}; priority_queue<int,vector<int>,cmp> q;
void dijspfa()
{
q.push(s);
memset(inq,,sizeof(inq));
memset(dist,0x7f,sizeof(dist));
dist[s]=;
while(!q.empty())
{
int u=q.top();
q.pop();inq[u]=;
for(int j=first[u];j>;j=e[j].nxt)
{
if(e[j].len+dist[u]<dist[e[j].to])
{
dist[e[j].to]=dist[u]+e[j].len;
if(inq[e[j].to]==)
{
q.push(e[j].to);inq[e[j].to]=;
}
}
}
}
}
int main()
{
memset(first,,sizeof(first));
cin>>n>>m>>s;
for(int i=;i<=m;++i)
{
int a,b,c;
cin>>a>>b>>c;
addstar(i,a,b,c);
}
dijspfa();
for(int i=;i<=n;++i)
{
cout<<dist[i]<<" ";
}
return ;
}

【算法】祭奠spfa 最短路算法dijspfa的更多相关文章

  1. SPFA 最短路算法

    SPFA算法 1.什么是spfa算法? SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA一般情况复杂度是O(m)O(m) ...

  2. Johnson算法:多源最短路算法

    Johnson算法 请不要轻易点击标题 一个可以在有负边的图上使用的多源最短路算法 时间复杂度\(O(n \cdot m \cdot log \ m+n \cdot m)\) 空间复杂度\(O(n+m ...

  3. SPFA最短路算法

    SPFA是改良后的BellmanFord(在刘汝佳的入门经典2上,甚至直接将SPFA归为BellmanFord的队列优化版本). 这是算法的伪代码 d[s] = 0, 其余d[?] = INF; 将s ...

  4. dijkstra,belllman-ford,spfa最短路算法

    参考博客 时间复杂度对比: Dijkstra:  O(n2) Dijkstra + 优先队列(堆优化):  O(E+V∗logV) SPFA:  O(k∗E) ,k为每个节点进入队列的次数,一般小于等 ...

  5. Dijkstra算法——单源最短路算法

    一.介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他各个节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 适用于有 ...

  6. 最短路算法之 Dijkstra算法

    Dijkstra算法 Dijkstra算法是典型最短路算法,用于计算一个节点到其它全部节点的最短路径. 主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最 ...

  7. [ACM] 最短路算法整理(bellman_ford , SPFA , floyed , dijkstra 思想,步骤及模板)

    以杭电2544题目为例 最短路 Problem Description 在每年的校赛里,全部进入决赛的同学都会获得一件非常美丽的t-shirt. 可是每当我们的工作人员把上百件的衣服从商店运回到赛场的 ...

  8. 【最短路算法】Dijkstra+heap和SPFA的区别

    单源最短路问题(SSSP)常用的算法有Dijkstra,Bellman-Ford,这两个算法进行优化,就有了Dijkstra+heap.SPFA(Shortest Path Faster Algori ...

  9. 图论之最短路算法之SPFA算法

    SPFA(Shortest Path Faster Algorithm)算法,是一种求最短路的算法. SPFA的思路及写法和BFS有相同的地方,我就举一道例题(洛谷--P3371 [模板]单源最短路径 ...

随机推荐

  1. vue.js国际化vue-i18n插件的使用问题,在模版文本、组件方法、jsf方法里的使用

    vue.js国际化vue-i18n插件的使用问题,在模版文本.组件方法.jsf方法里的使用 1.在文本里使用{{$t("xxx")}} <span>{{$t(" ...

  2. SQL server 删除日志文件 秒删

    直接执行 USE [库名称]GOALTER DATABASE [库名称] SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE  [库名称] SET REC ...

  3. sehll 小脚本的编写{基础}

    1.模拟linnux登录shell #/bin/bash echo -n "login:" read name echo -n "password:" read ...

  4. Java8过滤器(Filter)

    1.在Java之前对List进行过滤的方式 public class BeforeJava8 { public static void main(String[] args) { List<Pe ...

  5. jquery serializeArray()、serialize()增加数据

    转自:http://blog.csdn.net/csdnzhangtao5/article/details/52981541 serialize().serializeArray()方法都是jquer ...

  6. ADO.Net的发展史

    1.演变历史: 它们是按照这个时间先后的顺序逐步出现的,史前->ODBC->OLEDB->ADO->ADO.Net. 2.下面分别介绍一下这几个. a. 史前的数据访问是什么样 ...

  7. JS制作蔡徐坤打篮球小游戏(鸡你太美?)

    一.前提: 和我之前写的 QT小球游戏 差不多(指的是实现方法). 感谢大佬的 Github:https://github.com/kasuganosoras/cxk-ball 外加游戏网页:http ...

  8. day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义

    复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...

  9. HBase Filter及对应Shell

    比较运算符 CompareFilter.CompareOp比较运算符用于定义比较关系,可以有以下几类值供选择: EQUAL 相等 GREATER 大于 GREATER_OR_EQUAL 大于等于 LE ...

  10. Bigger-Mai 养成计划,前端基础学习之CSS

    在标签上设置style属性: background-color: #2459a2; height: 48px; ... 编写css样式: 1. 标签的style属性 2. 写在head里面 style ...