题目描述

暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索

输入输出格式

输入格式:

第一行一个正整数T表示数据组数,对于每组数据:

第一行两个正整数N M,表示图有N个顶点,M条边

接下来M行,每行三个整数a b w,表示a->b有一条权值为w的边(若w<0则为单向,否则双向)

输出格式:

共T行。对于每组数据,存在负环则输出一行"YE5"(不含引号),否则输出一行"N0"(不含引号)。

负环指的是权值和为负数的环,用SPFA加上DFS做比较方便,如果用BFS来做就要遍历的话判断条件是入队n次,但不好操作。用DFS就好写多了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
#include<stdlib.h>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<ctype.h>
#define zuida 100000
using namespace std;
#define maxn 200005
struct node
{int to;int next;int val;
}bb[maxn];
int head[maxn];
int tot;
int vis[maxn];
int dis[maxn];
int flag;
void add(int a,int b,int c)
{bb[++tot].next=head[a];bb[tot].to=b;bb[tot].val=c;head[a]=tot;
}
void spfa(int u)
{if(flag)return;vis[u]=1;for(int i=head[u];i;i=bb[i].next){if(flag)return;int v=bb[i].to;if(dis[v]>bb[i].val+dis[u]){if(vis[v]){flag=1;cout<<v<<endl;return ;}dis[v]=dis[u]+bb[i].val;spfa(v);}}vis[u]=0;
}
int main()
{int T;cin>>T;while(T--){tot=0;flag=0;int n,m;cin>>n>>m;memset(dis,0,sizeof(dis));memset(vis,0,sizeof(vis));memset(head,0,sizeof(head));dis[1]=0;int aa,bb,cc;for(int i=1;i<=m;i++){cin>>aa>>bb>>cc;add(aa,bb,cc);if(cc>=0)add(bb,aa,cc);}for(int i=1;i<=n;i++){spfa(i);if(flag)break;}if(flag)cout<<"YE5"<<endl;else cout<<"N0"<<endl;}return 0;
}

转载于:https://www.cnblogs.com/SparkPhoneix/p/8885697.html

用SPFA判断是否存在负环相关推荐

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

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

  2. bellman ford 算法 判断是否存在负环

    Flyer 目录视图 摘要视图 订阅 微信小程序实战项目--点餐系统        程序员11月书讯,评论得书啦        Get IT技能知识库,50个领域一键直达 关闭 bellman for ...

  3. F - Wormholes(判断是否存在负环)

    ##题目描述 While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A w ...

  4. 解题报告:luoguP2868 Sightseeing Cows G(最优比率环,负环判定,二分答案)

    根据题意,我们要环上各点权值之和除以各边权值之和最大. 求最大答案,很明显可以使用二分答案.那么我们假设当前答案为 x,如果有更大的答案,那么方程就可以按下图转换: 也就是说如果有更大的答案,则有一个 ...

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

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

  6. 【最短路径问题笔记】SPFA算法及负环的判断

    dis数组:记录源点到每个结点最短路径值 in数组:记录结点进队次数 vis数组:记录结点是否在队列中 设立队列用来保存待优化的结点: 优化时每次取出队首结点cur,并且用cur点当前的最短路径对u点 ...

  7. 模板 - 判断负环(超时高效优化技巧)、01分数规划

    整理的算法模板合集: ACM模板 判断负环 判正环求最长路,判负环求最短路 int n; // 总点数 int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边 in ...

  8. 糖果(SPFA、判负环)

    Description 幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是 ...

  9. AcWing 904. 虫洞(SPFA or Djakarta or bellman判负环)

    题目连接 http://poj.org/problem?id=3259 思路 大概是想问我们能不能找到一个负环,那么再看一眼数据范围,500,感觉乱搞都能过,但是出题人很恶心啊,n的范围并不是500, ...

最新文章

  1. mysql length函数无法对字段值为null的筛选
  2. java匿名类的用法
  3. 【译】Introducing scrcpy
  4. java 循环结构和常用的类 总结笔记
  5. python3爬虫初探(一)之urllib.request
  6. java threadlocal 缺点_Java的ThreadLocal如何在后台实现?
  7. Effective Modern C++翻译(3)-条款2:明白auto类型推导
  8. 静态代码块与静态函数的执行顺序
  9. 2.吴恩达机器学习课程-作业2-逻辑回归
  10. 【网络安全】大学信息安全技术 期末考试复习题
  11. Rtklib-rinex文件的读取(rinex.c)-序言
  12. 用python写1加到100怎么写_python计算1到100的和
  13. 产业分析:2022南京市产业全景
  14. 使用VAE(变分自动编码器),来预测用户流失.
  15. Python的正则表达式和re模块
  16. 开源论坛框架调研总结
  17. 漫画:什么是 “智能供应链” ?
  18. 数据小助手:chenzx.dataassistant.db.NoteColumn设计
  19. H323端口开放一览表
  20. iamp是什么意思计算机网络,IAMP是什么意思

热门文章

  1. MongoDB学习day10--数据库导入导出
  2. 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)(转)...
  3. 四元数运动学笔记(1)旋转的表示
  4. English Through Movie
  5. [Tool] SourceTree初始化GitFlow遇到错误(git command not found)的解决方案
  6. 通过JAVA操作SAE上的MY SQL数据库
  7. 卡尔曼滤波器的一种形象表达
  8. tensorflow分类的loss函数_Tensorflow Keras的loss函数总结
  9. existed hive ods_hive数据仓库建设
  10. php去掉 部分字符,输出,php如何去除某个字符