第一种:(不推荐)

统计每个点的入队次数,如果某一个点入队了n次,则说明存在负环。

第二种:

统计当前每个点的最短路的边数,如果存在负环,负环上的某一个点的最短路边数一定会是正无穷,只要边数超过n(节点数),就可以判断存在负环。

特殊情况:图并不是全部连通,存在单独一个点没有入度和出度。这时候就不能只从某一个点进去找,有可能根本更新不到其他点。

这时候可以假设一个虚拟源点与所有的点都相连,并且距离为零。

一次把所有点入队,后续更新就可以检测出负环。

但以上这个方法被硬卡数据有可能超市,可以尝试

当所有点的入队次数超过2*n时,认为很大可能存在负环,但也可以被卡掉

传送门:判断负环

#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>using namespace std;
typedef pair<int ,int >PII;
int n,m,idx;
int h[100010],w[100010],e[100010],ne[100010];
int dist[100010],cnt[100010];
bool st[100010];
void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}bool spfa()
{queue<int>q;q.push(1);for(int i=1;i<=n;i++){st[i]=true;q.push(i);}while(q.size()){int t=q.front();q.pop();st[t]=false;for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[t]+w[i]){dist[j]=dist[t]+w[i];cnt[j]=cnt[t]+1;if(cnt[j]>=n) return true;if(!st[j]){q.push(j);st[j]=true;}}}}
return false;
}
int main()
{scanf("%d%d",&n,&m);memset(h,-1,sizeof h);while(m--){int a,b,c;scanf("%d%d%d",&a,&b,&c);add(a,b,c);}int t=spfa();if(t) printf("Yes");else printf("No");return 0;
}

负环——spfa判断负环的两种方式相关推荐

  1. Java判断回文数(两种方式)

    Java判断回文数(两种方式) 回文数是一个非常特殊的数,它从左边读和从右边读是一样的.例如12321 判断方式有两种. 方式一:对该数字进行分解,然后一一比对,拆解成 1 2 3 2 1,然后第一位 ...

  2. POJ 3259 Wormholes【最短路/SPFA判断负环模板】

    农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的前达到目的地!他的N(1≤N≤500)个农场被编号为1..N,之间有M(1≤M≤2500)条路径 ...

  3. 差分约束系统之Bellman_Ford与Spfa判断负权回路

    题目:http://poj.org/problem?id=1364 题意:就是简单的差分约束模型. 分析:首先我们必须知道,如果图中存在负权回路,那么差分约束没有可行解.而存在负权回路的条件是:图中某 ...

  4. 频率控制和滞环控制的半桥/全桥LLC电路仿真对比 两种方式下均可实现输出电压闭环控制 ,模型中包含负载的阶跃变化过程 ,可以验证闭环系统稳定性

    频率控制和滞环控制的半桥/全桥LLC电路仿真对比 两种方式下均可实现输出电压闭环控制 ,模型中包含负载的阶跃变化过程 ,可以验证闭环系统稳定性 滞环控制和变频控制下的电感电流和输出电压波形图如第二幅图 ...

  5. 判断顺序栈栈满的两种方式

    判断顺序栈栈满的两种方式

  6. 判断dll的.netframwork的版本的两种方式

    1.使用ILSpy将dll打开,如下图可以看到.NETFramework的版本: 2.使用反射,代码如下: var tar = (TargetFrameworkAttribute)Assembly.L ...

  7. php 递归实现无限极分类和排序_无限极分类的两种方式,递归和引用

    说到无限极分类,比较常见的做法是在建表的时候,增加一个parnet_id字段用来区别自己所属的分类(是顶级分类还是子分类) 由于展示数据的时候,需要表达出这种所属关系,所以必然要在读取数据的时候进行一 ...

  8. python有两个运行程序分别是什么_运行python程序的两种方式

    [单选题]I wonder why ________ are so interested in action movies. [单选题]项目经理的职责不包括以下哪项内容 ? [简答题]结合项目的特点和 ...

  9. Python字符串的两种方式——百分号方式,format的方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

最新文章

  1. 化解谷歌AI霸权的另一种思路?开发平台的生态围剿
  2. public,private,protected访问权限在Java,C++中的解析
  3. 云炬Android开发笔记 2-2 Android studio项目上传到Github及无法连接Github的问题处理
  4. MySQL数据库事务的特性
  5. 爬取京东商品分类和链接
  6. linux ucontext 类型,协程:posix::ucontext用户级线程实现原理分析 | WalkerTalking
  7. 六、Web服务器——FilterListener 学习笔记
  8. ebs 供应商地点信息_供应商,地址,业务实体,地点关联银行账户
  9. 注解实现json序列化的时候自动进行数据脱敏
  10. Docker系列之一:在线安装docker和下载镜像
  11. 分享个三国志2017挂机脚本 可玩性很高占用小
  12. 4.68亿人信息泄露:2 块钱就能查你的身份证,还带照片!
  13. 180420 逆向-DDCTF_WP(Re)
  14. 帧定格(用于定格画面添加字幕或者图片)
  15. 信息技术与计算科学(二)信息的度量
  16. python word转excel_看Python如何无缝转换Word和Excel
  17. Leap Motion 之Unity 开发指南(一. 基本概念与制作手预制件)
  18. phpstyudy端口被占用怎么办
  19. 沃伦巴菲特和约尔欧斯汀如何克服公共演讲的恐惧
  20. 2019年西工大计算机机试题(C语言)

热门文章

  1. 如何在Android项目中使用VLC
  2. AT32F403A, XMC, SPIM, LVGL, 图片, SPIM存储意外擦除的BUG原因与解决
  3. Android开发过程中使用到百度地图时,报错“PERMISSION_UNFINISHED”
  4. Android Studio 4,大厂面试必备
  5. 智慧工业能耗管理系统方案
  6. python 大智慧365 数据格式_Python爬取365好书中小说代码实例
  7. 【VRPTW】基于蚁群算法实现时间窗车辆配送问题附Matlab代码
  8. 花了168个小时,我不停和8台智能音箱聊天
  9. 先立一个flag,今年学好区块链
  10. ADAS仿真测试-基于原始数据流的雷达感知测试