poj 3259 时光穿梭问题 bellman_ford算法
题意:有n个空地,有m条双向大路,w条时光隧道单向路。问能否回到过去?
思路:判断是否有负环存在,如果有负环存在那么就可以一直小就可以回到过去了
- 创建源顶点 V到其他顶点的距离d 初始为INF d[1]=0;
- 计算最路径,执行v-1次遍历 对于每条边 if(d[v]>d[s]+t) d[v]=d[s]+t;
- 判断是否有负环 遍历所有的边 计算u至v的距离,如果对于v存在更小的距离 则存在
- 有松弛 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算法的更多相关文章
- 【原创】POJ 3259 Wormholes(Bellman-Ford) && 简介Bellman-Ford算法
[原创] 题目大意 John有N个农场,一共有M条边,在农场上出现了W个虫洞(W是一条边),其中M是双向普通边,W是单向虫洞边.John穿行于农场之间每经过一条边(S到E)的时间为+T,每经过虫洞会时 ...
- POJ 3259 Wormholes (Bellman_ford算法)
题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- POJ 3259 Bellman_Ford算法
额.关键是读题.反正我是看了解题报告才知道意思的.给你n个点.m条路.双向的.耗费时间.w个虫洞.单向的.时间为负值.问你是否可以从某一点返回看到之前的自己.即为判断是不是有负环.用Bellman_F ...
- 最短路(Bellman_Ford) POJ 3259 Wormholes
题目传送门 /* 题意:一张有双方向连通和单方向连通的图,单方向的是负权值,问是否能回到过去(权值和为负) Bellman_Ford:循环n-1次松弛操作,再判断是否存在负权回路(因为如果有会一直减下 ...
- poj - 3259 Wormholes (bellman-ford算法求最短路)
http://poj.org/problem?id=3259 农夫john发现了一些虫洞,虫洞是一种在你到达虫洞之前把你送回目的地的一种方式,FJ的每个农场,由n块土地(编号为1-n),M 条路,和W ...
- POJ 3259 Wormholes(bellman_ford,判断有没有负环回路)
题意:John的农场里field块地,path条路连接两块地,hole个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts.我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前 ...
- POJ 3259 Wormholes(最短路,判断有没有负环回路)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24249 Accepted: 8652 Descri ...
- ACM: POJ 3259 Wormholes - SPFA负环判定
POJ 3259 Wormholes Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- ShortestPath:Wormholes(POJ 3259)
田里的虫洞 题目大意:就是这个农夫的田里有一些虫洞,田有很多个点,点与点之间会存在路,走过路需要时间,并且这些点存在虫洞,可以使农夫的时间退回到时间之前,问你农夫是否真的能回到时间之前? 读完题:这一 ...
随机推荐
- 360或其他双核浏览器下在兼容模式用chrome内核渲染的方法
<meta name="renderer" content="webkit"> <meta http-equiv="X-UA-COM ...
- 映射部署tomcat
近期遇到问题总结[映射部署]2017年10月03日 10:16:54 守望dfdfdf 阅读数:108更多个人分类: Java知识编辑版权声明:本文为博主原创文章,转载请注明文章链接. https:/ ...
- Mavlink消息包解析
Byte Index 字节索引 Content 内容 Value 值 Explanation 说明 0 包起始标志 v1.0: 0xFE (v0.9: 0x55) 指示新消息帧的开始.在v1.0版本中 ...
- GITHUB中GIT BASH基础命令行
PS:转自https://www.cnblogs.com/WangXinPeng/p/8016293.html 1.常用命令行工具: ①cmd ②powershell ③git ba ...
- 第2章 TCP-IP的工作方式
第2章 TCP-IP的工作方式 TCP/IP协议系统 为了实现TCP的功能,TCP/IP的创建者使用了模块化的设计.TCP/IP协议系统被分为不同的组件,每个组件分别负责通信过程的一个步骤.这种模块化 ...
- linux nginx 404错误页面设置
配置nginx 实现404错误 返回一个页面 1.配置nginx.conf 在http代码块 添加 fastcgi_intercept_errors on; 2.在网站的sever代码块 添加 err ...
- Eucalyptus-NC管理
1.前言 Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) ...
- /usr/local/sbin/arpspoof
/usr/local/sbin/arpspoof arpspoof -t 攻击者ip地址 网关ip地址 稍等系,被攻击者机器的arp的缓存就已经变了.
- python3基础08(exec、bytearray使用等)
#!/usr/bin/env python# -*- coding:utf-8 -*- str="test"print(ascii(str))a=bytearray("a ...
- CSS第二节
div做页面布局的建议 把整个网页从上到下分成若干块(一般分三块:头,中间,尾部),每一块都按下面的思路 先写第一层,可以设置背景色,或者高度和垂直居中(line-height保证内容不超出高度),不 ...