Wormholes—POJ3259

简介: Wormholes—POJ3259

Problem 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.

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.


Input

Line 1: A single integer, F. F farm descriptions follow.

Line 1 of each farm: Three space-separated integers respectively: N, M, and 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.

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.


Output

Lines 1… F: For each farm, output “YES” if FJ can achieve his goal, otherwise output “NO” (do not include the quotes).

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

Problem solving report:

Description:路径的遍历是双向的,虫洞的传送时间是单向的,通过路径和虫洞能否使他看到最初的自己。

Problem solving: 这个题是在存在负权边的情况下是否存在负权回路,输入时一共存入2*m个边表示双向,存入 时只存入一次表示单向,利用Ford算法最后重新遍历一遍点的坐标,如果还存在最短路发生变化就会出现负权回路。

Accepted Code:

#include<stdio.h>
int main()
{
  int N;
  scanf("%d",&N); 
  while(N--){
    int dis[30000],i,k,n,m,u[30000],v[30000],w[30000],check,flag,t;
    int inf=99999999;
    int a,b,c;
    scanf("%d%d%d",&n,&m,&t);
    for(i=1;i<=2*m;){
      scanf("%d%d%d",&a,&b,&c);
      u[i]=a;
      v[i]=b;
      w[i++]=c;
      u[i]=b;
      v[i]=a;
      w[i++]=c;
    } 
    for(i=2*m+1;i<=2*m+t;i++){
      scanf("%d%d%d",&a,&b,&c);
      u[i]=a;
      v[i]=b;
      w[i]=-c;
      
    }
    for(i=1;i<=n;i++)
      dis[i]=inf;
    dis[1]=0;
    for(k=1;k<n;k++){
      check=0;
      for(i=1;i<=2*m+t;i++){
        if(dis[v[i]]>dis[u[i]]+w[i]){
          dis[v[i]]=dis[u[i]]+w[i];
          check=1;
        }   
      }
      if(check=0)
        break;
    }
    flag=0;
    for(i=1;i<=2*m+t;i++)
      if(dis[v[i]]>dis[u[i]]+w[i])
        flag=1;
    if(flag==1)
      printf("YES\n");
    else
      printf("NO\n"); 
  }

  return 0;
}
相关文章
|
存储 缓存 数据库
群控代理IP搭建教程
群控代理IP搭建教程
596 13
|
人工智能 程序员 C#
两种程序员,你是哪一种?
在这个由代码编织的世界里,程序员这个大家庭里,住着两种截然不同的 "物种" —— 一种是将编程视为日常工作的职业型,另一种则是热衷于技术探索的狂热分子,你是哪一种呢?今天,我们就来聊聊这两种程序员的 "特征"。
276 0
|
C# C++
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
2807 0
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
|
安全 开发者 Python
python队列(Queue)
python队列(Queue)
510 1
|
缓存 运维 NoSQL
使用 psutil 获取硬件、网络以及进程信息
使用 psutil 获取硬件、网络以及进程信息
341 0
|
机器学习/深度学习 人工智能 安全
人工智能与未来工作场所:机遇与挑战
在数字化浪潮的推动下,人工智能(AI)正逐步渗透到各行各业,重塑着未来的工作场所。本文将探讨AI技术如何改变职场生态,包括提高工作效率、创造新的职业机会以及带来的技能转变需求。同时,我们也将分析AI技术可能引发的挑战,如就业安全、伦理问题和对教育体系的影响。通过对比分析,本文旨在为读者提供一个全面的视角,理解AI在未来工作场所中的双重角色。
|
消息中间件 存储 缓存
阿里一面,说说你知道消息中间件的应用场景有哪些?
阿里一面,说说你知道消息中间件的应用场景有哪些?
428 83
阿里一面,说说你知道消息中间件的应用场景有哪些?
力扣每日一题 6/22 字符串/贪心
力扣每日一题 6/22 字符串/贪心
143 0
|
存储 Linux 数据安全/隐私保护
【Linux取经路】权限管理——还在因为没有权限而头疼?手把手教你修改权限(一)
【Linux取经路】权限管理——还在因为没有权限而头疼?手把手教你修改权限(一)
378 0
|
数据采集 监控 算法
量化交易交易所机器人系统开发自动交易量化机器人开发
量化交易机器人是一种基于算法的自动交易系统,能够快速响应市场变化,通过预设的策略,及时处理交易信号,降低投资者错失良机的风险。量化交易机器人的开发涉及到多个方面,包括交易市场的数据分析、交易策略的制定、机器人系统的开发和部署等。
522 0

热门文章

最新文章