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)
田里的虫洞 题目大意:就是这个农夫的田里有一些虫洞,田有很多个点,点与点之间会存在路,走过路需要时间,并且这些点存在虫洞,可以使农夫的时间退回到时间之前,问你农夫是否真的能回到时间之前? 读完题:这一 ...
随机推荐
- Day1上
上午发挥强差人意.心态不好,编译器一直报错,心里比较慌. t1 每一个P枚举底数 .可二分 T2 暴力30 打标60 x^3-y^3=(x-y)*(x^2+xy+y^2). x-y==1. ! p ...
- Hibernate基础案例1
使用到的是MySQL数据库 1.在项目中先引入jar包,并添加引用 <dependencies> <dependency> <groupId>junit</g ...
- Log4j知识汇总
Log4j在java开发中还是很常见的,而在日志系统里面也占有举足轻重的地位,想要做好日志相关的工作,了解log4j还是很必要的. 下面就针对 log4j的官方文档user-guide 进行翻译与整理 ...
- Kyligence Analytics Platform Enterprise
平台: arm 类型: ARM 模板 软件包: kap 2.3 kyanalyzer 2.3 apache kylin basic software bi big data cube data war ...
- Tomcat Stack-8.0.35 (OpenLogic CentOS7.2)
平台: CentOS 类型: 虚拟机镜像 软件包: apache2.4.20 mysql5.6.30 tomcat8.0.35 apache application server basic s ...
- 撸了个 django 数据迁移工具 django-supertube
撸了个 django 数据迁移工具 django-supertube 支持字段映射和动态字段转化. 欢迎 star,issue https://github.com/FingerLiu/django- ...
- POJ 2392 Space Elevator(多重背包)
显然塔的总高度不会超过最大的a[i],而a[i]之前的可以到达的高度 是由a值更小的块组成,所以按照a从小到大的顺序去转移. 然后就是多重背包判断存在性了,几乎和coin那题一样. 数据没coin丧病 ...
- 扫描局域网ip的shell
# vim /mysh/ipscan.sh #!/bin/bash # scan the local alive ipaddress # -- if [ -f $filename ];then ech ...
- mac 下删除非空文件夹
Linux中rmdir命令是用来删除空的目录.使用方式: rmdir [-p] dirName 参数: -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除. 举例说明:rmdir folde ...
- javaweb基础(27)_jsp标签库实例
一.开发标签库 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.I ...