Wormholes(spfa判负环)
Time Limit: 2000MS | Memory Limit: 65536KB | 64bit IO Format: %I64d & %I64u |
Description
While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that is BEFORE you entered the wormhole! Each of FJ's farms comprises N (1 ≤ N ≤ 500) fields conveniently numbered 1.. N, M (1 ≤ M ≤ 2500) paths, and W (1 ≤ W ≤ 200) wormholes.
在探索他的农场时,农场主约翰发现了一些令人惊叹的虫洞。虫洞是非常独特的,因为它是一条单向路径,在进入虫洞之前,它会把你带到它的目的地。每个FJ农场由N(1≤N≤500)字段方便编号1 . .N,M(1≤≤2500)路径,和W W(1≤≤200)虫洞。
As FJ is an avid time-traveling fan, he wants to do the following: start at some field, travel through some paths and wormholes, and return to the starting field a time before his initial departure. Perhaps he will be able to meet himself :) .
作为一个狂热的时空旅行迷,他想做以下的事情:从一些领域开始,穿越一些路径和虫洞,并在他出发前一段时间回到起始场。也许他能见到自己。
To help FJ find out whether this is possible or not, he will supply you with complete maps to F (1 ≤ F ≤ 5) of his farms. No paths will take longer than 10,000 seconds to travel and no wormhole can bring FJ back in time by more than 10,000 seconds.
帮助FJ找出是否这是可能的,他将为你提供完整的映射到F(F 1≤≤5)他的农场。没有路径需要超过1万秒的时间来旅行,而且没有虫洞可以让FJ回到1万多秒的时间。
Input
输入
Line 1: A single integer, F. F farm descriptions follow.
第1行:一个单独的整数,F . F农场描述如下。
Line 1 of each farm: Three space-separated integers respectively: N, M, and W
每个农场的第1行:分别是3个空格分隔的整数:N、M和W
Lines 2.. M+1 of each farm: Three space-separated numbers (S, E, T) that describe, respectively: a bidirectional path between S and E that requires T seconds to traverse. Two fields might be connected by more than one path.
行2 . .每个农场的M + 1:分别描述的三个空格分隔的数字(S,E,T):在S和E之间的双向路径,需要T秒来遍历。两个字段可能由多个路径连接。
Lines M+2.. M+W+1 of each farm: Three space-separated numbers (S, E, T) that describe, respectively: A one way path from S to E that also moves the traveler back T seconds.
行M + 2 . .每个农场的M + W + 1:分别描述的三个空格分隔的数字(S,E,T):一个从S到E的路径,这也使旅行者返回T秒。
Output
输出
Lines 1.. F: For each farm, output "YES" if FJ can achieve his goal, otherwise output "NO" (do not include the quotes).
行1 . .F:对于每个农场,如果FJ能达到他的目标,输出“是”,否则输出“不”(不包括引号)。
Sample Input
样例输
2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8
Sample Output
样例输出
NO
YES
Hint
提示
For farm 1, FJ cannot travel back in time.
对于农场1号来说,FJ不能及时返回。
For farm 2, FJ could travel back in time by the cycle 1->2->3->1, arriving back at his starting location 1 second before he leaves. He could start from anywhere on the cycle to accomplish this.
对于第2个农场,FJ可以在周期1 - > 2 - > 3 - > 1的时间内返回,在他离开之前1秒到达他的起始位置。他可以从这个周期的任何一个地方开始完成这个任务。
题意是问是否能通过虫洞回到过去;
虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。
我们把虫洞看成是一条负权路,问题就转化成求一个图中是否存在负权回路;
所以说这个题还是比较水的。
各种错误:
数组开小了!一直RE!
该网站上无返回值的函数必须用void!否则CE。
在spfa里面多加了一个dis[s]=0;WA!
代码:
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define N 2521 using namespace std; int t,dis[N],x,y,z,n,m,s,tot,head[N]; bool vis[N],flag; struct Edge { int to,next,ds; }edge[N*]; int read() { ,f=; char ch=getchar(); ') { ; ch=getchar(); } ') { x=x*+ch-'; ch=getchar(); } return x*f; } void add(int from,int to,int dis) { tot++; edge[tot].ds=dis; edge[tot].to=to; edge[tot].next=head[from]; head[from]=tot; } void begin() { memset(dis,,sizeof(dis)); memset(vis,false,sizeof(vis)); memset(head,,sizeof(head)); tot=flag=; } void spfa(int s) { vis[s]=true; // if(flag) return ; for(int i=head[s];i;i=edge[i].next) { if(dis[s]+edge[i].ds<dis[edge[i].to]) { if(vis[edge[i].to]||flag) { flag=true; break; } dis[edge[i].to]=dis[s]+edge[i].ds; spfa(edge[i].to); } } vis[s]=false; } int main() { t=read(); while(t--) { n=read(),m=read(),s=read(); begin(); ;i<=m;i++) { x=read(),y=read(),z=read(); add(x,y,z); add(y,x,z); } ;i<=s;i++) { x=read(),y=read(),z=read(); add(x,y,-z); } ;i<=n;i++) { spfa(i); if(flag) break; } if(flag) printf("YES\n"); else printf("NO\n"); } ; }
Wormholes(spfa判负环)的更多相关文章
- POJ 3259 Wormholes(SPFA判负环)
题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...
- [poj3259]Wormholes(spfa判负环)
题意:有向图判负环. 解题关键:spfa算法+hash判负圈. spfa判断负环:若一个点入队次数大于节点数,则存在负环. 两点间如果有最短路,那么每个结点最多经过一次,这条路不超过$n-1$条边. ...
- POJ3259 :Wormholes(SPFA判负环)
POJ3259 :Wormholes 时间限制:2000MS 内存限制:65536KByte 64位IO格式:%I64d & %I64u 描述 While exploring his many ...
- Poj 3259 Wormholes(spfa判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...
- BZOJ 1715: [Usaco2006 Dec]Wormholes 虫洞 DFS版SPFA判负环
Description John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N ...
- POJ3259 Wormholes(SPFA判断负环)
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
- spfa判负环
bfs版spfa void spfa(){ queue<int> q; ;i<=n;i++) dis[i]=inf; q.push();dis[]=;vis[]=; while(!q ...
- poj 1364 King(线性差分约束+超级源点+spfa判负环)
King Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14791 Accepted: 5226 Description ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
- BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划
BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...
随机推荐
- 服务器配置iis,php网站
1.在iis中选择物理路径.配置域名 2.添加php默认文档 3.修改处理程序映射 4.设置模块映射信息
- 二分查找算法java
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元 ...
- 什么是无符号段整数,什么又是有符号数,(c++与java语言里边的不同)
c++中:整型数分为有符号数和无符号数两种 unsigned int a;无符号整型变量a,意思是这个数最小值为0,最大值为2的32次方-1,因为一个整型数占四个字节,一个字节8位,共32位 int ...
- Mac 录制视频,并转为GIF格式
内容中包含 base64string 图片造成字符过多,拒绝显示
- Java 局部变量未初始化会报错,局部变量没有初始值,成员变量有初始值
Java 成员变量有初始值,而局部变量没有初始值. 如下所示,代码不能编译通过 public static void main(String[] args){ String s; Sy ...
- emoji等表情符号存mysql的方法
项目中需要存储用户信息(用户昵称有表情符号),自然就遇到了emoji等表情符号如何被mysql DB支持的问题 这里引用先行者博文:https://segmentfault.com/a/1190000 ...
- MariaDB数据库(三)
1. 基本查询 查询基本使用包括:条件.排序.聚合函数.分组和分页. 实例详解查询 1> 创建students表用作实验 MariaDB [testdb]> drop table stud ...
- python 基础知识汇总—— if else while continue
1.if 语句 什么是if语句?if语句用来干什么的? if语句说通俗点,就是判断,如果判断条件为真,那么就执行语句,就像我们生活中例子,如果你饿了,判断为真,就要吃饭,于是你就会执行吃饭这个动作,如 ...
- 【HIHOCODER 1323】回文字符串(区间DP)
描述 给定一个字符串 S ,最少需要几次增删改操作可以把 S 变成一个回文字符串? 一次操作可以在任意位置插入一个字符,或者删除任意一个字符,或者把任意一个字符修改成任意其他字符. 输入 字符串 S. ...
- 牛客网暑期ACM多校训练营(第四场)G Maximum Mode(思维)
链接: https://www.nowcoder.com/login?callBack=%2Facm%2Fcontest%2F142%2FG 题意: 给定n个数, 要求删去恰好m个数后的最大总数是多少 ...