题目描述

寻找一个从顶点1所能到达的负环,负环定义为:一个边权之和为负的环。

输入格式

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

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

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

输出格式

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

样例输入

  1. 2
  2. 3 4
  3. 1 2 2
  4. 1 3 4
  5. 2 3 1
  6. 3 1 -3
  7. 3 3
  8. 1 2 3
  9. 2 3 4
  10. 3 1 -8

样例输出

  1. N0
  2. YE5

数据范围和提示

\[n\leqslant2000

m\leqslant 3000

-10000\leqslant w\leqslant 10000

T\leqslant 10
\]

建议复制输出格式中的字符串。 本题数据感谢@negiizhao的精心构造,请不要使用玄学算法。本题数据有更新

思路

作为一道模板题也没什么好说的。。不过坑有以下几点:

  1. 只能用朴素spfa,而不能加优化qwq。新的数据卡了spfa优化。所以:正权图用dijkstra,负权图用朴素spfa,spfa优化在负权图上往往是负优化。
  2. 那几个字符串,YE5后面是5不是S,N0后面是0不是N。。。

实现和代码

和朴素spfa没有太大区别,只是每个点的入队次数最多\(n-1\)次(如果是\(n\)次,就直接返回有负环)

代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int T,n,m,vis[2005],dis[2005];
  4. vector<int>v[2005],val[2005];
  5. queue<int>q;
  6. bool spfa(int s)
  7. {
  8. while(!q.empty()) q.pop();
  9. memset(dis,0x3f3f3f3f,sizeof(dis));
  10. dis[1]=0;
  11. q.push(1);
  12. while(!q.empty())
  13. {
  14. int f=q.front();q.pop();int sz=v[f].size();
  15. for(int i=0;i<sz;i++)
  16. {
  17. int e=v[f][i];
  18. if(dis[f]+val[f][i]<dis[e])
  19. {
  20. vis[e]++;
  21. if(vis[e]<n)
  22. {
  23. q.push(e);
  24. dis[e]=dis[f]+val[f][i];
  25. }
  26. else
  27. {
  28. return true;
  29. }
  30. }
  31. }
  32. }
  33. return false;
  34. }
  35. int main()
  36. {
  37. scanf("%d",&T);
  38. while(T--)
  39. {
  40. scanf("%d %d",&n,&m);
  41. for(int i=1;i<=n;i++) v[i].clear();
  42. for(int i=1;i<=n;i++) val[i].clear();
  43. memset(vis,0,sizeof(vis));
  44. vis[1]=1;
  45. for(int i=1;i<=m;i++)
  46. {
  47. int aa,bb,ww;
  48. scanf("%d %d %d",&aa,&bb,&ww);
  49. if(ww<0) v[aa].push_back(bb),val[aa].push_back(ww);
  50. else
  51. {
  52. v[aa].push_back(bb);
  53. v[bb].push_back(aa);
  54. val[aa].push_back(ww);
  55. val[bb].push_back(ww);
  56. }
  57. }
  58. if(spfa(1)) printf("YE5\n");
  59. else printf("N0\n");
  60. }
  61. return 0;
  62. }

LG P2285 [模板]负环(spfa判负环)的更多相关文章

  1. SPFA判负环模板

    void DFS_SPFA(int u){   if(flag) return; vis[u]=true;   for(int i=head[u];i;i=edges[i].nxt){   if(fl ...

  2. [模板]SPFA判负环

    目录 一.BFS法判负环 二.DFS法判负环 三.SPFA判正环 一.BFS法判负环 Code: #include<bits/stdc++.h> #define re register # ...

  3. 浅谈SPFA判负环

    目录 SPFA判负环 [前言] [不可代替性] [具体实现] SPFA的过程 判负环 [核心代码] [例题] SPFA判负环 有不足的地方请指出 本蒟蒻一定会修改吼 [前言] 最短路的求法中最广为人知 ...

  4. 【原创】SPFA判负环

    [定义与概念] 给定一张有向图,若其中存在一个环的所有权值之和为负数,这个环称为负环. [算法实现] 当然,负环的求解可以暴搜,但是时间复杂度就难以入眼了,我们回到求解单源最短路径算法上面,看看它们能 ...

  5. POJ 3259 Wormholes(SPFA判负环)

    题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...

  6. Poj 3259 Wormholes(spfa判负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...

  7. spfa判负环

    bfs版spfa void spfa(){ queue<int> q; ;i<=n;i++) dis[i]=inf; q.push();dis[]=;vis[]=; while(!q ...

  8. poj 1364 King(线性差分约束+超级源点+spfa判负环)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14791   Accepted: 5226 Description ...

  9. 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)

    传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...

随机推荐

  1. vmware 安装 VMwareTools

    mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom cp VMwareTools-x.x.x-yyyy.tar.gz ~/ cd ~ ...

  2. c++ demo code

    /* //多继承 #include <iostream> using namespace std; class Sofa { public: Sofa(); ~Sofa(); void s ...

  3. 查看Oracle表空间使用情况

    1.查询表空间的总容量 as MB from sys.dba_data_files a group by a.TABLESPACE_NAME 2.查询表空间的空闲容量 select b.TABLESP ...

  4. chrome jssip

    WebRTC 实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力 ...

  5. 【SVN】彻底 svn 服务器上的 删除某一个文件或文件夹

    参考: CSDN1:https://blog.csdn.net/u011729865/article/details/78764523 CSDN2:https://blog.csdn.net/wyyo ...

  6. Java同步数据结构之Map概述及ConcurrentSkipListMap原理

    引言 前面介绍了CopyOnWriteArraySet,本来接着是打算介绍ConcurrentSkipListSet,无耐ConcurrentSkipListSet的内部实现其实是依赖一个Concur ...

  7. Java HttpClient Post请求参数格式为XML

    1.最近忙着做一个接口,拿到文档的时候,what?我当时就震惊了,全都是XML数据传输. 我当时就懵了,哎没得办法,在暑假传输这方面笔者比较熟练json格式数据,简单易懂啊 那就学呗. 2.我在使用的 ...

  8. js 基本类型与引用类型的存储

    js的变量类型分为基本数据类型和引用数据类型 7种基本数据类型:null, undefined, number, boolean, string(大多数语言中string属于引用数据类型,而在js中它 ...

  9. 初始Hibernate框架

    首先我们需要先创建一个案例 构建一个Student 的实体类 private String name; private Integer age; private Integer id; 在SRC根目录 ...

  10. jenkins:多个job时怎么按照一定顺序执行构建

    一.安装Jenkins多项目构建插件(我已安装):Multijob 二.新建Multijob Project任务 三.配置