cnt数组记录每个点入栈次数,无负环时最大入栈次数为n,因为最短路最多有n-1条边。

有负环时最短路趋于负无穷,入栈次数大于n。

#include<stdio.h>
#include<string.h>
#define M 1005
#define inf 0x3f3f3f3f
int n,m;
struct edge{int v,w,next;
}e[10005];
int p[1005],eid;
int vst[1005],q[1005],d[1005],vis[1005],s,r,l;
int cnt[1005];
void insert(int u,int v,int w) {struct edge t={v,w,p[u]};e[eid]=t;p[u]=eid++;
}
void insert2(int u,int v,int w) {insert(u,v,w);insert(v,u,-w);
}
int main() {scanf("%d%d",&n,&m);memset(p,-1,sizeof(p));for(int i=0;i<m;i++) {int u,v,w;scanf("%d%d%d",&u,&v,&w);if(w>0) insert(u,v,w);else insert(v,u,w);}memset(d,inf,sizeof(d));r=0,l=0;s=1;d[s]=0;vst[s]=1;q[r++]=s;cnt[s]++;while(l!=r) {int now=q[l++];l%=M;vst[now]=0;for(int i=p[now];~i;i=e[i].next){int v=e[i].v;if(d[v]>d[now]+e[i].w) {d[v]=d[now]+e[i].w;if(cnt[v]>n) {printf("Yes");return 0;}if(!vst[v]) {q[r++]=v;cnt[v]++;r%=M;vst[v]=1;}}}}printf("No");return 0;
}

时光机 (spfa判断负环)相关推荐

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

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

  2. spfa 判断负环 (转载)

    当然,对于Spfa判负环,实际上还有优化:就是把判断单个点的入队次数大于n改为:如果总的点入队次数大于所有点两倍 时有负环,或者单个点的入队次数大于sqrt(点数)有负环.这样时间复杂度就降了很多了. ...

  3. UVA 558 SPFA 判断负环

    这个承认自己没看懂题目,一开始以为题意是形成环路之后走一圈不会产生负值就输出,原来就是判断负环,用SPFA很好用,运用队列,在判断负环的时候,用一个数组专门保存某个点的访问次数,超过了N次即可断定有负 ...

  4. 负环——spfa判断负环的两种方式

    第一种:(不推荐) 统计每个点的入队次数,如果某一个点入队了n次,则说明存在负环. 第二种: 统计当前每个点的最短路的边数,如果存在负环,负环上的某一个点的最短路边数一定会是正无穷,只要边数超过n(节 ...

  5. 算法基础课-搜索与图论-spfa-AcWing 852. spfa判断负环:spfa求负环板子

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: dist[x] 表示从源点到x点的最短距离. spfa算法求最短路的算法步骤: 初始化一个队列,将起点入队. 取出队头元素t,遍历它 ...

  6. PKU3259-Wormholes(SPFA判断负环,含题意)

    题目: 一开始被题目的梦幻给弄的晕乎乎.的却,作者很会yy. 意思是: 一个农夫有cas个田地,然后每个田地里面有nodeNum个结点,结点之间可能有多条路径(这是一个无向图),田地里还有w个虫洞(虫 ...

  7. spfa判断负环( 负环判定 + spfa )

    给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible. 数据保证 ...

  8. AcWing 852. spfa判断负环(spfa or bellman)

    题目链接 https://www.acwing.com/problem/content/description/854/ 思路 思路一 我们定义一个数组cnt,cnt[i]表示i这个点被更新的次数,那 ...

  9. Wormholes 虫洞 BZOJ 1715 spfa判断负环

    John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N (从1..N标号)块地 ...

最新文章

  1. 烂泥:SQL Server 2005数据库备份与恢复
  2. charshow技术预研
  3. 错误 error C2220: 警告被视为错误 - 没有生成“object”文件
  4. linux应用程序接收文件,Linux应用程序学习之文件编程
  5. ACM-ICPC 2018 徐州赛区网络预赛 D. EasyMath
  6. leetcode 198 python
  7. (转)比特币王国的内战与分裂|《财经》特稿
  8. NOIP 2005 等价表达式 (TYVJ P1060)
  9. 优酷暗黑模式(三):暗黑模式设计指南
  10. 康佳电视应用助手服务器连接超时,康佳电视程序无响应怎么办?详细解决方法...
  11. 考研失利,找工作感悟
  12. gstreamer gst-launch 记录 原理
  13. 6天面试、斩获6家硅谷巨头Offer,我是如何做到的?
  14. [Java] Comparator接口/compare方法的介绍与使用
  15. glm() and lm()
  16. solaris 10 ipmp
  17. java futuretask 单例_集群环境下java单例查询多了就异常
  18. 〖干货〗史上最详细快充科普帖!!!
  19. (私人收藏)2019WER积木教育机器人赛(普及赛)解决方案-(全套)获取能源核心
  20. 【CubeMX配置stm32定时器中断】

热门文章

  1. CCF- CSP 201912-2回收站选址 巧用STL实现O(n)时间复杂度 满分题解
  2. SQL:如何给sql查询结果加上序号
  3. 微信小程序 使用腾讯地图SDK详解及实现步骤
  4. 【模板】仙人掌的基本概念和判定
  5. 浅谈大型互联网企业入侵检测及防护策略
  6. 微信群营销方式微信群建群营销案例
  7. 作文:The Harm of Divorce
  8. 新视野大学英语视听说第三版答案
  9. 使用Jason's Utter Ramblings Repo的yum源出现warning: rpmt
  10. matlab hdf write,matlab读hdf