题意:有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. input累加赋值

    需求如下:第一个input添加字符到第二个input,第二个input需要累加. html: <tr> <td rowspan="2" class="D ...

  2. C#简单代码转移数据库数据

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;u ...

  3. Duplicate Emails

    Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...

  4. 面向对象(OOP)二

    一.“魔术”函数 - 自动调用 魔术方法 在面向对象有一些特别的方法,无需特别定义,已自动具备某些功能,例如构造函数__construt,这些方法统称魔术方法,在日后的编程中,可以使用这些方法的特性设 ...

  5. git与github的区别

    一直纠结于这俩个的区别,今天有时间翻看了一些有关git的详解终于把这个问题搞得清楚了,大概就是下面的意思: Git是一款免费.开源的分布式版本控制系统 Github是用Git做版本控制的代码托管平台

  6. 跨平台移动开发phonegap/cordova 3.3全系列教程-结合asp.net/jqmboile

    遠程app配置 把編譯後的www資料夾,復制到遠程地址(目錄結構不要改變), 例如:建議使用app-framework 1.加入jquery mobile1.4点击打开链接 2.加入app-frame ...

  7. Nginx+Keepalived双主轮询负载均衡

    双主模式使用两个VIP,前段有2台服务器,互为主从,两台服务器同时工作,不存在资源浪费情况.同时在前端的DNS服务器对网站做多条A记录,实现了Nginx的负载均衡,当一台服务器故障时候,资源会转移到另 ...

  8. jquery datatable 获取当前分页的数据

    使用jquery datatable 遇到分页分别求和时,找了半天才找到获取当前分页数据的方法,以此总结 var table=$('#example').DataTable( { "pagi ...

  9. POJ 2104 K-th Number(分桶,线段树,主席树)

    一道比较经典的数据结构题.可以用多种方式来做. 一,分桶法(平方分解). 根据数字x的大小和区间内不大于x的数字数量cnt的单调性,可知第k大数kth对应的cnt应该满足cnt≥k, 且kth是满足条 ...

  10. httpd2.4.6三种工作模式(如何配置),防止占用内存暴增的策略

    之前偷懒默认用yum安装了httpd.后来发现服务器内存暴增,一度达到75% 打开一看,好嘛后台休眠进程全是httpd. 重启之后再度访问发现内存还是稳步增长. [root@iz2ze3ayxs2yp ...