题意:

农夫john发现了一些虫洞,虫洞是一种在你到达虫洞之前把你送回目的地的一种方式,FJ的每个农场,由n块土地(编号为1-n),M

条路,和W个 虫洞组成,FJ想从一块土地开始,经过若干条路和虫洞,返回到他最初开始走的地方并且时间要在他离开之前,或者恰好等于他离开的时间。

把虫洞的时间看成负边权,就是是否存在负权回路。  虽然题中没有说明起点和终点 但从1开始即可  因为无论从哪个点开始 有没有负环的情况都是一样的

spfa 判断负环:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <sstream>
  4. #include <cstring>
  5. #include <map>
  6. #include <cctype>
  7. #include <set>
  8. #include <vector>
  9. #include <stack>
  10. #include <queue>
  11. #include <algorithm>
  12. #include <cmath>
  13. #include <bitset>
  14. #define rap(i, a, n) for(int i=a; i<=n; i++)
  15. #define rep(i, a, n) for(int i=a; i<n; i++)
  16. #define lap(i, a, n) for(int i=n; i>=a; i--)
  17. #define lep(i, a, n) for(int i=n; i>a; i--)
  18. #define rd(a) scanf("%d", &a)
  19. #define rlld(a) scanf("%lld", &a)
  20. #define rc(a) scanf("%c", &a)
  21. #define rs(a) scanf("%s", a)
  22. #define MOD 2018
  23. #define LL long long
  24. #define ULL unsigned long long
  25. #define Pair pair<int, int>
  26. #define mem(a, b) memset(a, b, sizeof(a))
  27. #define _ ios_base::sync_with_stdio(0),cin.tie(0)
  28. //freopen("1.txt", "r", stdin);
  29. using namespace std;
  30. const int maxn = , INF = 0x7fffffff, LL_INF = 0x7fffffffffffffff;
  31. int head[maxn], cnt, d[maxn], ans[maxn], vis[maxn];
  32. int n, m, s, t, c;
  33.  
  34. struct node{
  35. int u, v, w, next;
  36. }Node[maxn << ];
  37.  
  38. void add(int u, int v, int w)
  39. {
  40. Node[cnt].u = u;
  41. Node[cnt].v = v;
  42. Node[cnt].w = w;
  43. Node[cnt].next = head[u];
  44. head[u] = cnt++;
  45. }
  46.  
  47. int spfa(int s)
  48. {
  49. for(int i=; i<=n; i++) d[i] = INF;
  50. mem(ans, );
  51. mem(vis, );
  52. queue<int> Q;
  53. Q.push(s);
  54. vis[s] = ;
  55. d[s] = ;
  56. while(!Q.empty())
  57. {
  58. int u = Q.front(); Q.pop();
  59. vis[u] = ;
  60. for(int i=head[u]; i!=-; i=Node[i].next)
  61. {
  62. node e = Node[i];
  63. if(d[e.v] > d[e.u] + e.w)
  64. {
  65. d[e.v] = d[e.u] + e.w;
  66. if(!vis[e.v])
  67. {
  68. vis[e.v] = ;
  69. Q.push(e.v);
  70. if(++ans[e.v] > n) return true;
  71. }
  72. }
  73. }
  74. }
  75. return false;
  76. }
  77.  
  78. int main()
  79. {
  80. int T;
  81. scanf("%d", &T);
  82. while(T--)
  83. {
  84. mem(head, -);
  85. cnt = ;
  86. scanf("%d%d%d", &n, &m, &c);
  87. int u, v, w;
  88. for(int i=; i<m; i++)
  89. {
  90. scanf("%d%d%d", &u, &v, &w);
  91. add(u, v, w);
  92. add(v, u, w);
  93. }
  94. for(int i=; i<c; i++)
  95. {
  96. scanf("%d%d%d", &u, &v, &w);
  97. add(u, v, -w);
  98. }
  99. if(spfa())
  100. printf("YES\n");
  101. else
  102. {
  103. printf("NO\n");
  104. }
  105.  
  106. }
  107.  
  108. return ;
  109. }

POJ3259(Wormholes) 判断负环的更多相关文章

  1. poj3259 Wormholes (判负环)【spfa】(模板)

    <题目链接> 题目大意: John的农场里N块地,M条路连接两块地,W个虫洞,虫洞是一条单向路,会在你离开之前把你传送到目的地,就是当你过去的时候时间会倒退Ts.我们的任务是知道会不会在从 ...

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

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

  3. POJ 3259 Wormholes ( SPFA判断负环 && 思维 )

    题意 : 给出 N 个点,以及 M 条双向路,每一条路的权值代表你在这条路上到达终点需要那么时间,接下来给出 W 个虫洞,虫洞给出的形式为 A B C 代表能将你从 A 送到 B 点,并且回到 C 个 ...

  4. Wormholes POJ - 3259 spfa判断负环

    //判断负环 dist初始化为正无穷 //正环 负无穷 #include<iostream> #include<cstring> #include<queue> # ...

  5. spfa判断负环

    会了spfa这么长时间竟然不会判断负环,今天刚回.. [例题]poj3259 题目大意:当农场主 John 在开垦他的农场时,他发现了许多奇怪的昆虫洞.这些昆虫洞是单向的,并且可以把你从入口送到出口, ...

  6. spfa 判断负环 (转载)

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

  7. 洛谷 P2850 [USACO06DEC]虫洞Wormholes 判负环

    虫洞(wormhole) FJ 在农场上闲逛时,发现他的农场里有很多虫洞.虫洞是一条特殊的有向路径,当 FJ 从它的一头走到另一头后,他将被传送到过去的某个时刻.FJ 的每个农场包括 N(1<= ...

  8. 利用Bellman-Ford算法(有向图) 判断负环

    // 根据Bellman-Ford算法的原理 // 判断负环(算法的最大更新次数,应该是顶点数-1次) // 而如果存在负环,算法会一直更新下去 // 我们根据循环进行的次数,来判断负环 #inclu ...

  9. Extended Traffic LightOJ - 1074 spfa判断负环

    //判断负环 在负环内的城市输出? #include <iostream> #include <queue> #include <cstdio> #include ...

随机推荐

  1. 车轮升级PHP7踩过的一些坑

    社区php7升级记录 社区服务器已经全部完成升级,这里记录一下社区升级php7所遇到的问题,可以分为四个类型 扩展支持的变化,导致需要修改配置甚至调整替换操作的类库 php7语法检查比之前变得严格,部 ...

  2. 一次学生时代的经历,利用Python在机房杀红蜘蛛,脱离老师控制!

    这个为什么说是一次学生时代的经历呢,我的出发点并没有是为了吊胃口.确实,这个Python小应用,只能在学生时代用得着吧,尤其是高中和大学,如果你没有想到也没关系,看完我下面说的就会明白了.   在这里 ...

  3. STM32 printf()函数和scanf()函数重定向到串口

    STM32 printf()函数和scanf()函数重定向到串口 printf()函数和scanf()函数重定向 在学习STM32的时候,常常需要用串口来测试代码的正确与否,这时候就要要用到print ...

  4. c# create html table test

    string html = "<html><head><title>44444444</title>"; html += @&quo ...

  5. Kafka:Configured broker.id 2 doesn't match stored broker.id 0 in meta.properties.

    在安装Kafka集群的时候,碰到这个问题. 我们知道在搭建Kafka集群的时候,我们需要设置broker.id,以作为当前服务器在整个集群的唯一标志. 网上搜查资料是说,log.dirs目录下的met ...

  6. python语言程序设计3

    1, 起码坚持每天  半小时吧... 2, 上面有常用的几个数据类型..整数类型和字符串类型还行,但是列表类型的话就很蛋疼了. 3, 字符串类型的显著特点是在两侧有单引号或者双引号.用单引号和双引号表 ...

  7. Python 学习 第七篇:函数1(定义、调用和变量的作用域)

    函数是把一些语句集合在一起的程序结构,用于把复杂的流程细分成不同的组件,能够减少代码的冗余.代码的复用和修改代码的代价. 函数可以0个.1个或多个参数,向函数传递参数,可以控制函数的流程.函数还可以返 ...

  8. cmd命令入门

    第一类: 介绍原生的DOS 首先在cmd命令输入help,看到如下图的结果,这里展示的原生的DOS命令. 这里列出了一些命令,可以自己试试的玩.一般看到一个命令后,如果没有说明文档,你就尝试的在其命令 ...

  9. LDAP学习笔记总结

    一.LDAP概念LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根 ...

  10. hdu 1263 水果 结构的排序+sort自定义排序

    水果 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...