题目链接:poj3259 Wormholes

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

贴个SPFA代码:

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<cmath>
using namespace std;
#define lson rt*2
#define rson rt*2+1
#define CLR(a, b) memset((a), (b), sizeof((a)))
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int>pii;
const double inf = 0x3f3f3f3f;
const int N = ;
const int M = *+;
struct node {
int u, v;
int t;
int nex;
}edge[M];
int head[N]; int d[N];
int vis[N]; int n, m, w; int spfa(int x) {
int i, j, k;
queue<int> q;
d[x] = ;
vis[x] = ;
q.push(x);
while(!q.empty()) {
int u = q.front(); q.pop();
vis[u] = ;
for(i = head[u]; ~i; i = edge[i].nex) {
if(d[edge[i].v] > d[u] + edge[i].t) {
d[edge[i].v] = d[u] + edge[i].t;
if(!vis[edge[i].v]) {
vis[edge[i].v] = ;
q.push(edge[i].v);
}
}
}
if(d[x] < ) return ;//存在负权环
}
return ;
}
int main() {
int t, i;
scanf("%d", &t);
while(t--) {
scanf("%d%d%d", &n, &m, &w); for(i = ; i <= n; ++i) head[i] = -; for(i = ; i <= *m; i += ) { //普通路 双向
scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].t);
edge[i].nex = head[edge[i].u];
head[edge[i].u] = i; edge[i+].u = edge[i].v;
edge[i+].v = edge[i].u;
edge[i+].t = edge[i].t;
edge[i+].nex = head[edge[i].v];
head[edge[i].v] = i+;
}
for(; i <= *m+w; ++i) {//虫洞 单向
scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].t);
edge[i].t = -edge[i].t;
edge[i].nex = head[edge[i].u];
head[edge[i].u] = i;
} for(i = ; i <= n; ++i) {
d[i] = inf;
vis[i] = ;
}
int f = ;
for(i = ; i <= n; ++i) {
if(d[i] == inf) {//图可能不连通
if(spfa(i)) {f = ; break;}
}
}
if(f) puts("YES");
else puts("NO");
}
return ;
}

63ms

poj3259 Wormholes【Bellman-Ford或 SPFA判断是否有负环 】的更多相关文章

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

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

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

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

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

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

  4. uva558 Wormholes SPFA 求是否存在负环

    J - Wormholes Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Stat ...

  5. uva 558 - Wormholes(Bellman Ford判断负环)

    题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...

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

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

  7. POJ 1151 Wormholes spfa+反向建边+负环判断+链式前向星

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 49962   Accepted: 18421 Descr ...

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

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

  9. poj 3259 Wormholes 【SPFA&amp;&amp;推断负环】

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36852   Accepted: 13502 Descr ...

随机推荐

  1. React.js 小书 Lesson20 - 更新阶段的组件生命周期

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson20 转载请注明出处,保留原文链接和作者信息. 从之前的章节我们了解到,组件的挂载指的是将组件 ...

  2. Razor 将C#对象转换成Javascript对象, json还原被转码的字符 &quot·· HTML转义符

    Razor 将C#对象转换成Javascript对象 在Razor中使用Json字符串,特殊字符被自动转义(如:\"->") @{ var jsonStr = Html.Ra ...

  3. storm之topology的启动

    一个topology的启动包括了三个步骤 1)创建TopologyBuilder,设置输入源,输出源 2)获取config 3)提交topology(这里不考虑LocalCluster本地模式) 以s ...

  4. Java生成验证码(一)

    一.为什么要使用验证码     我们要通过验证码,由用户肉眼识别其中的验证码信息,从而区分用户是人还是计算机.    二.什么是验证码     验证码:是一种区分用户是计算机还是人的公共全自动程序. ...

  5. Linux 更新python至2.7后ImportError: No module named _ssl

    原文:http://blog.51cto.com/hunt1574/1630961 编译安装python 2.7后无法导入ssl包 解决办法: 1 下载地址:http://www.openssl.or ...

  6. unity3d之切换场景不销毁物体

    using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...

  7. radio 实现点击两次 第一次点击选中第二次点击取消

    由于项目的需求,要求radio点击两次后为取消状态,不方便修改为checkbox,可以用正面的方法实现. // jquery $('input:radio').click(function(){ // ...

  8. vue 数组重复,循环报错

    Vue.js默认不支持往数组中加入重复的数据.可以使用track-by="$index"来实现.

  9. 02_dubbo的SPI

    [dubbo为什么不采用JDK自带的SPI] 1.JDK自带的SPI(ServiceLoader)会一次性实例化扩展点所有实现,基本只能通过遍历全部获取,也就是接口的实现类全部加载并实例化一遍,如果我 ...

  10. babel的使用以及安装配置

    简介 babel是一个广泛使用的转码器,可以将ES6代码转化为ES5代码,从而在现有环境执行,这意味着,你可以现在就用ES6编写程序,而不用担心现有环境是否支持. 安装及配置 npm install  ...