文章目录

  • 题目分析
  • 题目链接

题目分析



来源:acwing

分析:

负环:负环是这样的一个环,该环上的边权之和是负数。

存在负环的话,会对我们求最短路造成障碍,因为绕着这个负环转无数次,最短路越来越小,最后是-∞。

求负环的常见方法, 基于SPFA:

  1. 统计每个点入队的次数,如果某个点入队n次(说明某点被更新大于等于n次),则说明存在负环。
  2. 统计每个点的最短路中所包含的边数,如果某点的最短路所包含的边数大于等于n,则说明有负环。(常用该法)

SPFA求负环的时间复杂度,经验值是O(mn)O(mn)O(mn),所以可能会超时。这里有个取巧的方法:当所有点的入队次数超过2n(或者3n)时,我们就认为图中有很大可能是存在负环的。

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N = 510, M = 5210;
int n, m1, m2;
int h[N], e[M], w[M], ne[M], idx;
int dist[N];
int q[N], cnt[N];
bool st[N];void add(int a, int b, int c){e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;
}// spfa判断负环
bool spfa(){int hh = 0, tt = 0;memset(dist, 0, sizeof dist); // 距离可以初始化为任何值memset(st, 0, sizeof st); // 判重数组memset(cnt, 0, sizeof cnt); // 最短路包含的边数// 所有点压入队列,分析过程需要借助虚拟源点for(int i =1; i <= n; i ++){q[tt ++] = i;st[i] = true;}while(hh != tt){auto  t = q[hh ++];//循环队列:走到终点,回到开头if(hh == N) hh = 0; st[t] = false; // 出队,标记一下for(int i = h[t]; ~i ;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;// 以j为终点的最短路的边数// 如果边数≥n,说明存在负环if(cnt[j] >= n) return true;if(!st[j]){q[ tt++] = j;if(tt == N) tt = 0;st[j] = true;}}}}return false;
}int main(){int T;cin >> T;while(T --){cin >> n >> m1 >> m2;memset(h, -1, sizeof h);idx = 0;while(m1 --){int a, b, c;cin >> a >> b >> c;add(a, b, c), add(b, a, c);}// 负权边while( m2 --){int a, b, c;cin >> a >> b >> c;add(a, b, -c);}if(spfa()) puts("YES");else puts("NO");}}

题目链接

https://www.acwing.com/problem/content/906/

算法提高课-图论-负环-AcWing 904. 虫洞:spfa求负环裸题相关推荐

  1. 算法提高课-图论-差分约束- AcWing 1169. 糖果:spfa求单源最短路、差分约束

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 差分约束系统 差分约束系统是一种特殊的N元一次不等式组.它包含N个变量X1,...,XnX_1,...,X_nX1​,...,Xn​ ...

  2. 算法提高课-图论-有向图的强连通分量-AcWing 367. 学校网络:强连通分量、tarjan算法

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 第一问:通过tarjan算法求出强连通分量并且缩点后,统计入度为0的点的个数p即可. 第二问,至少加几条边才能使图变成强连通分量?这 ...

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

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

  4. 算法提高课-图论-负环-AcWing 1165. 单词环:spfa判正环、二分、01分数规划

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 如何建图? 这样建图.以样例举例.起点是前两个字母,终点是末尾两个字母,边权是字符串的长度. 我们求的是什么呢? 题目要求Σ边权Σ1 ...

  5. 算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题

    题目分析 来源:acwing 分析: 道路:双向,边权非负, 航线:单向,边权可正可负,且无环. 根据题意,点可以分为很多团(连通块),团内部只有道路(道路是双向的,而且是连通的,所以不能存在航线,否 ...

  6. 算法提高课-图论-有向图的强连通分量-AcWing 1174. 受欢迎的牛:tarjan算法求强连通分量、tarjan算法板子、强连通图

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 强连通图:给定一张有向图.若对于图中任意两个结点x,y,既存在从x到y的路径,也存在从y到x的路径,则称该有向图是"强连通 ...

  7. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1123. 铲雪车:披着欧拉回路外衣的小学数学题

    文章目录 题目解答 无向图的一笔画 有向图的一笔画 题目来源 题目解答 来源:acwing 分析: 对于一个给定的图,怎样判断是否存在着一个恰好包含了所有的边,并且没有重复的路径?这就是一笔画问题.用 ...

  8. 算法提高课-图论-单源最短路的建图方式-AcWing 903. 昂贵的聘礼:建图巧妙、dijkstra、考虑等级

    题目分析 来源:acwing 由于终点是1号节点,建立虚拟节点S,如下建图(根据样例画图).S出发和每个点直连的边权代表直接买该物品花的金币数:而由S到1的任意一条通路,边权之和就是花费的金币数.所以 ...

  9. 算法提高课-图论-单源最短路的建图方式-AcWing 1127. 香甜的黄油:spfa最短路

    题目分析 来源:acwing 分析: 多源汇最短路.所以我们首先想到的是floyd算法, 可是它的复杂度是O(n3)O(n^3)O(n3),会超时.所以我们需要另外考虑. 任意一个点作为起点求出到所有 ...

最新文章

  1. Windows 8 Metro App学习笔记(九)—磁砖
  2. backup ram不稳定 stm32_STM32学习笔记
  3. linux c 笔记 文件(三)
  4. linux交换空间使用率,linux编程系统中交换空间的使用情况
  5. js实现图片无缝连接
  6. iOS开发系列-线程同步dispatch_barrier_async
  7. android 无法显示SD卡目录,Android studio无法在SD卡上创建新目录?
  8. 【Linux系统编程】进程同步与互斥:POSIX有名信号量
  9. mysql不用left join_MySQL在右表数据不唯一的情况下使用left join的方法_MySQL - join
  10. linux mint 18支持安卓编译,Linux mint 18版本开启SSH服务
  11. 如何修复 MacBook Pro 电池寿命?
  12. JS对象 颠倒数组元素顺序reverse() reverse() 方法用于颠倒数组中元素的顺序。
  13. W801单片机学习笔记——内部结构,总线架构篇
  14. mysql自动全量更新表_MySQL数据库自动全量备份脚本
  15. 您的计算机无法正常启动,3种简单的方法 修复错误 ‘您的电脑无法正常启动’...
  16. 基于canvas图像处理的图片 灰色图像
  17. GO 打开WINDOWS的默认浏览器
  18. 乐动ld06激光雷达sdk改bug记录分享
  19. 资产初探:理财直接融资工具
  20. 百度视频在Android和iOS端性能测试方法

热门文章

  1. 《学习JAVASCRIPT数据结构与算法》 ES6 部分笔记
  2. 生产者消费者模式 php 【转】
  3. SSH框架搭建的时候遇到的问题
  4. Linux下搭建mpi集群(ubuntu下用虚拟机测试)
  5. VC++获取操作系统的版本 GetVersionEx函数
  6. Java除法结果带小数、进一法的实现 Java问题通用解决代码
  7. server sql 判断是否是当天_判断sql server 是否在开启服务状态
  8. java经典50题_JAVA经典算法50题(3)【面试+工作】
  9. 【Arduino】斑马线指示灯Zabra_crossing_WS2812
  10. stm32f030cc 替换 stm32f030c8 后程序下载失败问题