uva558 Wormholes SPFA 求是否存在负环
Description
In the year 2163, wormholes were discovered. A wormhole is a subspace tunnel through space and time connecting two star systems. Wormholes have a few peculiar properties:
- Wormholes are one-way only.
- The time it takes to travel through a wormhole is negligible.
- A wormhole has two end points, each situated in a star system.
- A star system may have more than one wormhole end point within its boundaries.
- For some unknown reason, starting from our solar system, it is always possible to end up in any star system by following a sequence of wormholes (maybe Earth is the centre of the universe).
- Between any pair of star systems, there is at most one wormhole in either direction.
- There are no wormholes with both end points in the same star system.
All wormholes have a constant time difference between their end points. For example, a specific wormhole may cause the person travelling through it to end up 15 years in the future. Another wormhole may cause
the person to end up 42 years in the past.
A brilliant physicist, living on earth, wants to use wormholes to study the Big Bang. Since warp drive has not been invented yet, it is not possible for her to travel from one star system to another one directly. This can be done using wormholes, of
course.
The scientist wants to reach a cycle of wormholes somewhere in the universe that causes her to end up in the past. By travelling along this cycle a lot of times, the scientist is able to go back as far in time as necessary to reach the beginning of the universe
and see the Big Bang with her own eyes. Write a program to find out whether such a cycle exists.
Input
The input file starts with a line containing the number of cases c to be analysed. Each case starts with a line with two numbers n and m . These indicate the number of star systems ( )
and the number of wormholes ( ) . The star systems are numbered from 0 (our solar system) through n-1
. For each wormhole a line containing three integer numbers x, y and t is given. These numbers indicate that this wormhole allows someone to travel from the star system numbered x to the star system numbered y,
thereby ending up t ( ) years in the future.
cid=84319" style="color:blue; text-decoration:none">Output
The output consists of c lines, one line for each case, containing the word possible if it is indeed possible to go back in time indefinitely, or not possible if this is not possible with the given set of star systems and wormholes.
cid=84319" style="color:blue; text-decoration:none">Sample Input
2
3 3
0 1 1000
1 2 15
2 1 -42
4 4
0 1 10
1 2 20
2 3 30
3 0 -60
Sample Output
possible
not possible
Miguel A. Revilla
1998-03-10
题意:问能否通过虫洞,回到过去,意思实际上就是求,最短路里面有不有负环。
思路:SPFA 或者Bellman-ford 推断下有不有负环就能够了,对于SPFA,假设有负环,表明进栈次数大于等于n次。
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#define INF 9999999
using namespace std; int n,m;
int num[2222];
int dis[2222];
int vis[2222];
int f[2222];
int u[2222],v[2222],w[2222],next[2222]; int spfa()
{
queue<int>q;
memset(vis,0,sizeof vis);
memset(num,0,sizeof num); for(int i=0;i<=n;i++) dis[i]=INF;
dis[0]=0;
q.push(0);
num[0]++; while(!q.empty())
{
int x=q.front(); q.pop();
vis[x]=0;
for(int i=f[x];i!=-1;i=next[i])
if(dis[x]+w[i]<dis[v[i]])
{
dis[v[i]]=dis[x]+w[i];
if(vis[v[i]]==0)
{
vis[v[i]]=1;
q.push(v[i]);
num[v[i]]++;
if(num[v[i]]>=n)
return 1;
}
}
} return 0;
} int main()
{
int T;
scanf("%d",&T); while(T--)
{
scanf("%d%d",&n,&m);
memset(f,-1,sizeof f); for(int i=0;i<m;i++)
{
scanf("%d%d%d",&u[i],&v[i],&w[i]);
next[i]=f[u[i]];f[u[i]]=i;
} if(spfa()==0)
puts("not possible");
else
puts("possible"); }
return 0;
} /*
5 4
1 2 1
1 3 2
2 4 3
2 5 2
*/
uva558 Wormholes SPFA 求是否存在负环的更多相关文章
- POJ 1151 Wormholes spfa+反向建边+负环判断+链式前向星
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 49962 Accepted: 18421 Descr ...
- POJ3259 Wormholes —— spfa求负环
题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- vijos1053 用spfa判断是否存在负环
MARK 用spfa判断是否存在负环 判断是否存在负环的方法有很多, 其中用spfa判断的方法是:如果存在一个点入栈两次,那么就存在负环. 细节想想确实是这样,按理来说是不存在入栈两次的如果边权值为正 ...
- poj 3259 Wormholes 【SPFA&&推断负环】
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36852 Accepted: 13502 Descr ...
- spfa算法及判负环详解
spfa (Shortest Path Faster Algorithm) 是一种单源最短路径的算法,基于Bellman-Ford算法上由队列优化实现. 什么是Bellman_Ford,百度内 ...
- SPFA算法的判负环问题(BFS与DFS实现)
经过笔者的多次实践(失败),在此温馨提示:用SPFA判负环时一定要特别小心! 首先SPFA有BFS和DFS两种实现方式,两者的判负环方式也是不同的. BFS是用一个num数组,num[x] ...
- poj3259 Wormholes【Bellman-Ford或 SPFA判断是否有负环 】
题目链接:poj3259 Wormholes 题意:虫洞问题,有n个点,m条边为双向,还有w个虫洞(虫洞为单向,并且通过时间为倒流,即为负数),问你从任意某点走,能否穿越到之前. 贴个SPFA代码: ...
- (简单) POJ 3259 Wormholes,SPFA判断负环。
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
- POJ3259:Wormholes(spfa判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 68097 Accepted: 25374 题目链接: ...
随机推荐
- 富通天下(T 面试)
1.Mybatis的分页查询是怎么实现的? 交流: A:我们是通过PageHelper插件实现的 B:你说下原生SQL应该怎么写? A:某段查询SQL,实现分页需要使用limit关键字,改变下标和页码 ...
- DROP DOMAIN - 删除一个用户定义的域
SYNOPSIS DROP DOMAIN name [, ...] [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP DOMAIN 将从系统表中删除一个用户域. 只 ...
- axios中为所有请求带上Token头
axios中为所有请求带上Token头 https://www.imooc.com/article/27751
- clone对象或数组
function clone(obj) { var o; if (typeof obj == "object") { if (obj === null) { o = null; } ...
- 解决margin塌陷问题
父元素添加: border: 1px solid transparent; 或者 over-flow:hidden;
- PHP04 HTTP协议入门(转)
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...
- android开发链接
http://blog.csdn.net/zz2043191420/article/details/47338591
- nodejs实现网站数据的爬取
// 引入https模块,由于我们爬取的网站采用的是https协议 const https = require('https'); // 引入cheerio模块,使用这个模块可以将爬取的网页源代码进行 ...
- 5.1 qbxt 一测 T2
求和[问题描述] 组合数 C(n,m)是从 n 个物品中取 m 个的方案数. C(n,m)=(n!)/(m!(n-m)!) 斐波那契数列 F 满足,F[0]=F[1]=1,n≥2 时 F[n]=F[n ...
- luogu P1455 搭配购买
题目描述 明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某个网站上有卖云朵的,小朋友们决定一同前往去看看这种神奇的商品,这个店里有n朵云,云朵已经 ...