这样似乎跑得快:

初始化所有的dis是0,然后枚举每个点作为起点,用DFS更新所有点的dis;

如果更新到一个栈中节点,那么有负环。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #define INF 0x3f3f3f3f
  5. #define space putchar(' ')
  6. #define enter putchar('\n')
  7. using namespace std;
  8. typedef long long ll;
  9. template <class T>
  10. bool read(T &x){
  11. char c;
  12. bool op = 0;
  13. while(c = getchar(), c < '0' || c > '9')
  14. if(c == '-') op = 1;
  15. else if(c == EOF) return 0;
  16. x = c - '0';
  17. while(c = getchar(), c >= '0' && c <= '9')
  18. x = x * 10 + c - '0';
  19. if(op) x = -x;
  20. return 1;
  21. }
  22. template <class T>
  23. void write(T x){
  24. if(x < 0) putchar('-'), x = -x;
  25. if(x >= 10) write(x / 10);
  26. putchar('0' + x % 10);
  27. }
  28. const int N = 200005;
  29. int T, n, m;
  30. int ecnt, adj[N], go[2*N], nxt[2*N];
  31. ll w[2*N], dis[N];
  32. bool ins[N], done;
  33. void add(int u, int v, int ww){
  34. go[++ecnt] = v;
  35. nxt[ecnt] = adj[u];
  36. adj[u] = ecnt;
  37. w[ecnt] = ww;
  38. }
  39. void dfs(int u){
  40. if(done) return;
  41. ins[u] = 1;
  42. for(int e = adj[u], v; e; e = nxt[e]){
  43. if(done) return;
  44. if(v = go[e], w[e] < dis[v] - dis[u]){
  45. dis[v] = dis[u] + w[e];
  46. if(ins[v]) return (void)(done = 1);
  47. else dfs(v);
  48. }
  49. }
  50. ins[u] = 0;
  51. }
  52. void init(){
  53. for(int i = 1; i <= n; i++)
  54. ins[i] = adj[i] = dis[i] = 0;
  55. ecnt = done = 0;
  56. }
  57. int main(){
  58. read(T);
  59. while(T--){
  60. read(n), read(m);
  61. init();
  62. for(int i = 1, u, v, ww; i <= m; i++){
  63. read(u), read(v), read(ww);
  64. add(u, v, ww);
  65. if(ww >= 0) add(v, u, ww);
  66. }
  67. for(int i = 1; i <= n; i++){
  68. dfs(i);
  69. if(done) break;
  70. }
  71. if(done) puts("YE5");
  72. else puts("N0");
  73. }
  74. return 0;
  75. }

Luogu 3385 负环 | 我有特别的SPFA技巧的更多相关文章

  1. 【luogu P3385 负环】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3385 SPFA判负环. 这个题必须卡一卡才过得去. 按理说对于一个负环点应当是入队 > n次. 但是这 ...

  2. SPFA - Luogu 3385 【模板】负环

    [模板]负环 描述 找负环 输入 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M,表示图有N个顶点,M条边 接下来M行,每行三个整数a b w,表示a->b有一条权值为w ...

  3. lightoj 1074 spfa判断负环

     Extended Traffic Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Sub ...

  4. ACM: POJ 3259 Wormholes - SPFA负环判定

     POJ 3259 Wormholes Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu   ...

  5. [BZOJ 1486][HNOI2009]最小圈(二分答案+dfs写的spfa判负环)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1486 分析:容易想到先二分答案x,然后把所有边的权值-x,那么如果图中存在权值和为0的 ...

  6. loj 1108(spfa判负环)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26823 思路:题目的意思是求出所有的能够到达负环的点.负环很好求, ...

  7. POJ 3259 Wormholes(SPFA判负环)

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

  8. P3385 【模板】负环

    题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M,表示图有N个顶点,M条边 ...

  9. 培训补坑(day5:最小生成树+负环判断+差分约束)

    补坑补坑((╯‵□′)╯︵┻━┻) 内容真的多... 一个一个来吧. 首先是最小生成树. 先讲一下生成树的定义 生成树就是在一张图上选取一些边,使得整个图上所有的点都连通. 那么我们要求的最小生成树有 ...

随机推荐

  1. TPO-21 C2 Which elective courses to take

    /* 加粗:语音部分 * 红色:单词部分 * 斜体:语法部分 * 下划线:信号词/句 */ 第 1 段 1.Listen to a conversation between a student and ...

  2. 求二维数组最大子数组的和。郭林林&胡潇丹

    求二维数组子数组的最大值,开始思路不太清晰.先从最简单的开始. 以2*2的简单数组为例找规律, 假设最大数为a[0][0],则summax=a[0][0],比较a[0][0]+a[0][1].a[0] ...

  3. ats 转发代理

    ats是一个通用代理,可配置为反向和转发代理; 转发代理可以用作基础架构中的中央工具来访问web, 它可以与缓存结合使用以降低 总体带宽使用率.转发代理充当本地网络上的客户端浏览器与这些客户端访问的所 ...

  4. PCL 库存在vtk的问题导致libproj.so链接错误

    常变现为** No rule to make target '/usr/lib/x86_64-linux-gnu/libproj.so', needed by ××× vtk库的bug导致,目前尚未修 ...

  5. [转载]java面试中经常会被问到的一些算法的问题

    Java面试中经常会被问到的一些算法的问题,而大部分算法的理论及思想,我们曾经都能倒背如流,并且也能用开发语言来实现过, 可是很多由于可能在项目开发中应用的比较少,久而久之就很容易被忘记了,在此我分享 ...

  6. Ruby知识点一:方法

    1.实例方法 接收者是对象本身的方法 2.类方法 接收者是类本身的方法,调用类方法时,可以使用::或者.两个符号. 类名.方法名 类名::方法名 3.函数式方法 没有接收者(接收者省略而已)的方法 4 ...

  7. Python set 集合

    简介 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联 合), intersection(交), difference ...

  8. Vue 入门之组件化开发

    Vue 入门之组件化开发 组件其实就是一个拥有样式.动画.js 逻辑.HTML 结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue 的组件和也做的非常 ...

  9. xml配置文件特殊符号的处理方法

    2017.7.19遇到问题:偶然出现“认证失败,请重新登录”的现象   在xml中英文问号“?”是可以被正常解析的,但是以下这几种符号是不能正常解析的:分别是“&”.“<”.“>” ...

  10. 苹果针对on sale 的APP发的问题邮件

    2017年3月8日 上午8:07 发件人 Apple Dear Developer, Your app, extension, and/or linked framework appears to c ...