如果存在最短路径的边数大于等于点数,就有负环

给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。

请你判断图中是否存在负权回路。

输入格式

第一行包含整数n和m。

接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。

输出格式

如果图中存在负权回路,则输出“Yes”,否则输出“No”。

数据范围

1≤n≤20001≤n≤2000,
1≤m≤100001≤m≤10000,
图中涉及边长绝对值均不超过10000。

输入样例:

3 3
1 2 -1
2 3 4
3 1 -4

输出样例:

Yes

###########################################

 1 #include <bits/stdc++.h>
2 using namespace std;
3 //优化的贝尔曼福特算法,就是spfa算法,用更新过的点去更新和它相连接的点
4 const int N = 2010, M = 10010;
5 int h[N], e[M], w[M], ne[M];
6 int idx;
7 int dist[N], cnt[N];
8 bool flag[N];//代表该节点当前是否在队列里
9 int n, m;
10
11 void add(int a, int b, int c){
12 w[idx] = c; e[idx] = b;
13 ne[idx] = h[a];
14 h[a] = idx ++;
15 }
16
17 bool spfa(){
18 queue<int> q;//队列中存储的是已经更新过用来更新其他节点的点
19 //所有的点都是起点,加入队列
20 for(int i = 1;i <= n;++i){
21 q.push(i);
22 flag[i] = true;
23 }
24 while(!q.empty()){
25 int t = q.front(); q.pop();
26 flag[t] = false;//移除队列里
27 for(int i = h[t];i != -1;i = ne[i]){
28 int j = e[i];
29 //更新成功
30 if(dist[j] > dist[t] + w[i]){
31 dist[j] = dist[t] + w[i];
32 cnt[j] = cnt[t] + 1;//更新边数
33 if(cnt[j] >= n)return true;
34 if(!flag[j]) {//如果j不在队列里
35 q.push(j);
36 flag[j] = true;//放进队列里
37 }
38 }
39 }
40 }
41 return false;
42 }
43
44 int main(){
45 scanf("%d%d", &n, &m);
46 memset(h, -1, sizeof h);
47 while(m--){
48 int x, y, z;
49 scanf("%d%d%d", &x, &y, &z);
50 add(x, y, z);
51 }
52 if (spfa()) puts("Yes");
53 else puts("No");
54 }

使用spfa算法判断有没有负环的更多相关文章

  1. poj3259Wormholes (Bellman_Ford/SPFA/Floyed算法判断是否存在负环)

    题目链接:http://poj.org/problem?id=3259 题目大意:一个图,有n个顶点,其中有m条边是双向的且权值为为正,w条边是单向的且权值为负,判断途中是否存在负环,如果有输出YES ...

  2. vijos1053 用spfa判断是否存在负环

    MARK 用spfa判断是否存在负环 判断是否存在负环的方法有很多, 其中用spfa判断的方法是:如果存在一个点入栈两次,那么就存在负环. 细节想想确实是这样,按理来说是不存在入栈两次的如果边权值为正 ...

  3. POJ 3259 Wormholes(最短路,判断有没有负环回路)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24249   Accepted: 8652 Descri ...

  4. POJ 3259 Wormholes(bellman_ford,判断有没有负环回路)

    题意:John的农场里field块地,path条路连接两块地,hole个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts.我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前 ...

  5. bellman-ford算法(判断有没有负环)

    #include <iostream> #include <vector> #include<string> #include<cstring> usi ...

  6. poj3259 Wormholes【Bellman-Ford或 SPFA判断是否有负环 】

    题目链接:poj3259 Wormholes 题意:虫洞问题,有n个点,m条边为双向,还有w个虫洞(虫洞为单向,并且通过时间为倒流,即为负数),问你从任意某点走,能否穿越到之前. 贴个SPFA代码: ...

  7. 解题报告:poj 3259 Wormholes(入门spfa判断负环)

    Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...

  8. POJ3259Wormholes(判断是否存在负回路)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 38300   Accepted: 14095 Descr ...

  9. ACM - 图论 - P3385 负环

    P3385 负环 题目描述 给定一个 \(n\) 个点的有向图,请求出图中是否存在从顶点 \(1\) 出发能到达的负环. 负环的定义是:一条边权之和为负数的回路. 输入格式 本题单测试点有多组测试数据 ...

随机推荐

  1. UiPath屏幕抓取Screen Scraping的介绍和使用

    一.屏幕抓取(Screen Scraping)的介绍 屏幕抓取使您能够在特定的UI元素或文档(如.PDF文档)中提取数据 二.屏幕抓取(Screen Scraping)在UiPath中的使用 [if ...

  2. 基于Vue2.x的前端架构,我们是这么做的

    通过Vue CLI可以方便的创建一个Vue项目,但是对于实际项目来说还是不够的,所以一般都会根据业务的情况来在其基础上添加一些共性能力,减少创建新项目时的一些重复操作,本着学习和分享的目的,本文会介绍 ...

  3. Redis开机自启

    添加开机启动服务 vi /etc/systemd/system/redis.service 在redis.service中输入以下内容 ps:ExecStart配置成自己的路径 [Unit] Desc ...

  4. kubectl 最新常用命令 --V1.24版本

    Kubectl 自动补全 BASH source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completi ...

  5. MarkDown语法——更好地写博客

    MarkDown语法--更好地写博客 我们在学习过程中要尽量养成编写博客的 好习惯:一方面方便自己在学习之后进行一次汇总,其次自己书写的文章可以在以后的时间里反复查看以便于巩固,在找工作时博客也是被招 ...

  6. RT-Thread 组件 FinSH 使用时遇到的问题

    一.FinSH 的移植与使用问题 FinSH组件输入无反应的问题 现象:当打开 finsh 组件后,控制台会打相应的信息,如下图说是: \ | / - RT - Thread Operating Sy ...

  7. File类创建删除功能的方法和File类遍历(文件夹)目录功能

    File类创建删除功能的方法 -public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件 -public boolean delete(): ...

  8. 近期碰到的一些面试题--WPF、C#、数据库

    最近想换工作的念头特别强烈,面了几家公司没有拿到满意的offer,心仪的公司面完锁HC,有点无奈,感觉今年有点卷,把碰到过的面试题总结下. WPF相关: 1.定义依赖属性需要注意哪些地方? (1)依赖 ...

  9. Solution -「HNOI2013」消毒

    弱化一下,先考虑在二维上解决问题. 题目就转化为:有 \(n\) 个点 \((i, j)\) 需要被覆盖,而我们每次可以选一行或一列去覆盖,求覆盖所有点的最少选择次数. 如果我们对于每一个 \((i, ...

  10. Multi-Party Threshold Private Set Intersection with Sublinear Communication-2021:解读

    记录阅读论文的笔记. 摘要 总结: (1)CRYPTO 2019:The Communication Complexity of Threshold Private Set Intersection- ...