下面有两种写法不同的时间复杂度可以根据自己的理解程度去选择

第一种:

void Add(int u,double cost,int v)//邻接表存储关系
{w[top] = cost;Key[top] = v;next[top] = head[u];head[u] = top++;
}bool SPFA(int x)
{memset(vis,false,sizeof(vis));memset(inq,0,sizeof(inq));queue<int> Q;for(int i = 1;i <= n;i++) dis[i] = (i == x ? 0 : INF);vis[x] = true;inq[x] = 1;Q.push(x);while(!Q.empty()){int cur = Q.front();Q.pop();vis[cur] = false;for(int e = head[cur] ; e != -1; e = next[e]){int v = Key[e];if(dis[v] < dis[cur] * w[e]){dis[v] = dis[cur] * w[e];if(!vis[v]){inq[v] ++;if(inq[v] >= n) return true;//如果入队次数超过n-1次说明存在环或负权Q.push(v);vis[v] = true;}}}}return false;
}

第二种

初始化 map 为正无穷
bool SPFA(int x)
{queue<int> Q;memset(vis,false,sizeof(vis));memset(in,false,sizeof(in));for(int i = 1;i <= n;i++)   dis[i] = (i==x?0: INF);vis[x] = true;Q.push(x);in[x] = 1;while(!Q.empty()){int cur = Q.front();Q.pop();vis[cur] = false;for(int i = 1;i <=n;i++){if(map[cur][i]!=-INF&&dis[i] < dis[cur] * map[cur][i]){dis[i] = dis[cur] * map[cur][i];if(!vis[i]){in[i] ++;if(in[i] >= n) return true;//如果入队次数超过n-1次说明存在环或负权Q.push(i);vis[i] = true;}}}}return false;
}                                                                                                                                                         









												

最短路之 SPFA(判环+负权)相关推荐

  1. HDU 1217 Arbitrage (Floyd + SPFA判环)

    题目链接:HDU 1217 Arbitrage 简单的货币转换问题,给定多种货币,以及货币之间的汇率,问能否通过货币的转换实现收益. 例如: 1 US Dollar buys 0.5 British ...

  2. SPFA算法判断负权环(bfs_spfa,dfs_spfa)

    判断给定的有向图中是否存在负环. 利用 spfa 算法判断负环有两种方法: 1) spfa 的 dfs 形式,判断条件是存在一点在一条路径上出现多次. 2) spfa 的 bfs 形式,判断条件是存在 ...

  3. 牛客OI周赛5-提高组 wpy的请求 (spfa变形求负权通路)

    wpy的请求 spfa变形 题目大意:给一个n个点,m条边的有向图,可能有负权边,现在要把负边权都变成非负, 并且使得原图中的任意两点u,v最短路经过路径不变并且使得原图中的任意两点u,v最短路经过路 ...

  4. 【2019icpc南京站网络赛 - H】Holy Grail(最短路,spfa判负环)

    题干: As the current heir of a wizarding family with a long history,unfortunately, you find yourself f ...

  5. nyoj973 天下第一(spfa判环)

    题目973 题目信息 运行结果 本题排行 讨论区 天下第一 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3 描述 AC_Grazy一直对江湖羡慕不已,向往着大碗吃肉大碗喝 ...

  6. 算法提高课-图论-负环-AcWing 361. 观光奶牛:spfa判正环、负环、01分数规划、二分

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 题目要求ΣfiΣgi\frac{\Sigma{f_i}}{\Sigma{g_i}}Σgi​Σfi​​的最大值,这种问题称为01分数规 ...

  7. [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案

    题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...

  8. dfs版SPFA判负环

    例题 Description 泡泡鱼是一条调皮的鱼,ta的家住在一片珊瑚礁上.在ta的眼里,这些珊瑚礁的形态可以脑补成一个n个节点,m条边的带权图,在海水的腐蚀下,这些珊瑚礁形成了许多的环,ta想考考 ...

  9. #315 虫洞 判负权回路(bmf/spfa)

    题目描述 在一个神秘岛上,有N(1 <= N <= 500)个洞口,标号1..N,它们之间有M (1 <= M <= 2500) 条通道相连. 神秘的竟然另外还有W (1 &l ...

最新文章

  1. loadrunner 如何做关联
  2. Java 8中Stream API的这些奇技淫巧!你都Get到了吗?
  3. 如何使用Leangoo自动生成燃尽图
  4. c语言程序既可以编译执行也可以解释执行,2016年山东农业大学信息科学与工程学院C语言程序设计(同等学力加试)复试笔试仿真模拟题...
  5. 【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
  6. 学习dos批处理,再也不怕老板安排一些重复性高的工作了,几行代码就搞定!
  7. 计算文本相似度_Python文本相似性计算
  8. oracle dcd设置,Oracle配置DCD避免会话被防火墙强制断开
  9. 备份自己的myeclipse快捷键到需要的环境
  10. Skip level 1 on 1
  11. 打开Word时会出现错误的解决办法
  12. 正态分布的峰度和偏度分别为_偏度与峰度的正态性分布判断
  13. word硬回车是怎么产生的_在word中怎样删除软硬回车?
  14. 毕业设计之 - 基于深度学的图像修复 图像补全
  15. type在python是什么意思_python中type()是什么意思
  16. ERP系统到底能做什么?
  17. 蒲公英企服平台对话奈学教育CEO孙玄——旨在让每一个人都有逆袭的机会。
  18. 一则能领略到人生苦涩和忧伤的故事
  19. java 小孩报数_N个小孩围成一圈1-3报数,报3出局
  20. java中的Double与double的区别

热门文章

  1. 专访 | 神策数据CEO桑文锋:谁说大数据不需要「小而美」
  2. Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题
  3. JVM内存分为哪几部分?各个部分的作用是什么?
  4. Cisco路由器基础安全配置---特权模式和VTY线路密码
  5. android ndk程序UnsatisfiedLinkError解决方案
  6. (原创)无废话C#设计模式之十一:Composite
  7. the largest issue in management
  8. WHEN OVERSEAS
  9. IEEE R10 SAC Special Call for Proposals
  10. Question for recommendation system, which is a baseline