题意:有n个空地,有m条双向大路,w条时光隧道单向路。问能否回到过去?

思路:判断是否有负环存在,如果有负环存在那么就可以一直小就可以回到过去了

  1. 创建源顶点 V到其他顶点的距离d 初始为INF d[1]=0;
  2. 计算最路径,执行v-1次遍历  对于每条边 if(d[v]>d[s]+t)  d[v]=d[s]+t;
  3. 判断是否有负环   遍历所有的边 计算u至v的距离,如果对于v存在更小的距离 则存在
  4. 有松弛 d[v]>d[u]+t

解决问题的代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define maxn 510
#define maxw 2550*2+510
#define INF 1000000
int d[maxn];
int n, m;
struct node {
int u, v;
int t;
}edge[maxw];
bool solve()
{
for (int i = ; i <=n; i++) d[i] = INF;
d[] = ;
for (int i = ; i < n; i++)
{
bool flag = true;
for (int j = ; j < m; j++)
{
int u = edge[j].u;
int v = edge[j].v;
int t = edge[j].t;
if (d[v] > d[u] + t)
{
d[v] = d[u] + t;
flag = false;
}
}
if (flag) return false;
}
for (int i = ; i < m; i++)
{
if (d[edge[i].v] > d[edge[i].u] + edge[i].t)
return true;
}
return false;
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int M, W;
scanf("%d%d%d",&n, &M, &W);
m = ;
for (int i = ; i <= M; i++)
{
int u, v, t;
scanf("%d%d%d", &u, &v, &t);
edge[m].u = u;
edge[m].v = v;
edge[m++].t = t;
edge[m].u = v;
edge[m].v = u;
edge[m++].t = t;
}
for (int i =; i <= W; i++)
{
int u, v, t;
scanf("%d%d%d", &u, &v, &t);
edge[m].u = u;
edge[m].v = v;
edge[m].t = -t;
}
if (solve()) printf("YES\n");
else printf("NO\n");
}
return ;
}

其中比较神奇的是存图技巧

poj 3259 时光穿梭问题 bellman_ford算法的更多相关文章

  1. 【原创】POJ 3259 Wormholes(Bellman-Ford) && 简介Bellman-Ford算法

    [原创] 题目大意 John有N个农场,一共有M条边,在农场上出现了W个虫洞(W是一条边),其中M是双向普通边,W是单向虫洞边.John穿行于农场之间每经过一条边(S到E)的时间为+T,每经过虫洞会时 ...

  2. POJ 3259 Wormholes (Bellman_ford算法)

    题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submis ...

  3. POJ 3259 Bellman_Ford算法

    额.关键是读题.反正我是看了解题报告才知道意思的.给你n个点.m条路.双向的.耗费时间.w个虫洞.单向的.时间为负值.问你是否可以从某一点返回看到之前的自己.即为判断是不是有负环.用Bellman_F ...

  4. 最短路(Bellman_Ford) POJ 3259 Wormholes

    题目传送门 /* 题意:一张有双方向连通和单方向连通的图,单方向的是负权值,问是否能回到过去(权值和为负) Bellman_Ford:循环n-1次松弛操作,再判断是否存在负权回路(因为如果有会一直减下 ...

  5. poj - 3259 Wormholes (bellman-ford算法求最短路)

    http://poj.org/problem?id=3259 农夫john发现了一些虫洞,虫洞是一种在你到达虫洞之前把你送回目的地的一种方式,FJ的每个农场,由n块土地(编号为1-n),M 条路,和W ...

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

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

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

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

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

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

  9. ShortestPath:Wormholes(POJ 3259)

    田里的虫洞 题目大意:就是这个农夫的田里有一些虫洞,田有很多个点,点与点之间会存在路,走过路需要时间,并且这些点存在虫洞,可以使农夫的时间退回到时间之前,问你农夫是否真的能回到时间之前? 读完题:这一 ...

随机推荐

  1. Day1上

    上午发挥强差人意.心态不好,编译器一直报错,心里比较慌. t1 每一个P枚举底数 .可二分 T2 暴力30  打标60 x^3-y^3=(x-y)*(x^2+xy+y^2). x-y==1.  ! p ...

  2. Hibernate基础案例1

    使用到的是MySQL数据库 1.在项目中先引入jar包,并添加引用 <dependencies> <dependency> <groupId>junit</g ...

  3. Log4j知识汇总

    Log4j在java开发中还是很常见的,而在日志系统里面也占有举足轻重的地位,想要做好日志相关的工作,了解log4j还是很必要的. 下面就针对 log4j的官方文档user-guide 进行翻译与整理 ...

  4. Kyligence Analytics Platform Enterprise

    平台: arm 类型: ARM 模板 软件包: kap 2.3 kyanalyzer 2.3 apache kylin basic software bi big data cube data war ...

  5. Tomcat Stack-8.0.35 (OpenLogic CentOS7.2)

       平台: CentOS 类型: 虚拟机镜像 软件包: apache2.4.20 mysql5.6.30 tomcat8.0.35 apache application server basic s ...

  6. 撸了个 django 数据迁移工具 django-supertube

    撸了个 django 数据迁移工具 django-supertube 支持字段映射和动态字段转化. 欢迎 star,issue https://github.com/FingerLiu/django- ...

  7. POJ 2392 Space Elevator(多重背包)

    显然塔的总高度不会超过最大的a[i],而a[i]之前的可以到达的高度 是由a值更小的块组成,所以按照a从小到大的顺序去转移. 然后就是多重背包判断存在性了,几乎和coin那题一样. 数据没coin丧病 ...

  8. 扫描局域网ip的shell

    # vim /mysh/ipscan.sh #!/bin/bash # scan the local alive ipaddress # -- if [ -f $filename ];then ech ...

  9. mac 下删除非空文件夹

    Linux中rmdir命令是用来删除空的目录.使用方式: rmdir [-p] dirName 参数: -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除. 举例说明:rmdir folde ...

  10. javaweb基础(27)_jsp标签库实例

    一.开发标签库 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.I ...