Wormholes

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..NM (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, FF farm descriptions follow. 
Line 1 of each farm: Three space-separated integers respectively: NM, and W 
Lines 2..M+1 of each farm: Three space-separated numbers (SET) 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 (SET) 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

Hint

For farm 1, FJ cannot travel back in time. 
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.

Source

USACO 2006 December Gold

大意:有F个test,共N个编号,M个正向的u,v,t,即从u到v要花t秒,可双向,W个虫洞反向的,只单向,要花-t秒,问最后能不能到达出发之前。

就有if(d[edge.v]>d[edge.u]+edge.t){

flag = 0;

d[edge.v] = d[edge.u]+edge.t;

}

意为如果虫洞返回后的时间前于出发的时间,那么满足,经过N此循环都是满足的话,那么就是满足的。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAX = 22222222;
int F,N,M,W,cnt;
int d[6000];
struct edge
{
    int u;
    int v;
    int t;
}edge[6000];

bool bellman_ford()
{
    for(int i = 1; i <= N;i++)
        d[i] = MAX;
    d[1] = 0;
    bool flag;
    for(int i = 1; i <= N;i++){
            flag = 1;
       for(int j = 0; j < cnt; j++){
            if(d[edge[j].v]>d[edge[j].u]+edge[j].t){
                    flag = 0;
              d[edge[j].v] = d[edge[j].u]+edge[j].t;
         }
      }
    if(flag)
        return true;
   }
   return false;
}

int main()
{
    int u,v,t;
    scanf("%d",&F);
    while(F--){
            cnt = 0;
            scanf("%d%d%d",&N,&M,&W);
            for(int i = 1; i <= M;i++){
                scanf("%d%d%d",&u,&v,&t);
                edge[cnt].u = u; edge[cnt].v = v; edge[cnt].t = t;
                cnt++;
                edge[cnt].u = v; edge[cnt].v = u; edge[cnt].t = t;
                cnt++;
            }
            for(int i = 1; i <= W;i++){
                    scanf("%d%d%d",&u,&v,&t);
                    edge[cnt].u = u;edge[cnt].v = v;edge[cnt].t = -t;
                    cnt++;
            }
        if(bellman_ford())
            printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}

时间: 2024-10-12 03:44:22

Wormholes的相关文章

HDU 3259 Wormholes

题意:就是给你一个n,m,t   n代表有多少个点,m代表有多少个双向的边  t代表的是虫洞,现在要你判读是否还可以穿越到过去的点 虫洞的意思是给你的边是单向的,并且是负权值(输入的时候是正数) 思路:是否可以穿越回过去的点,即有没有负环,果断套用模板,dijkstra算法不能检测负环 AC代码: #include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<

POJ 3259 Wormholes SPFA算法题解

本题其实也可以使用SPFA算法来求解的,不过就一个关键点,就是当某个顶点入列的次数超过所有顶点的总数的时候,就可以判断是有负环出现了. SPFA原来也是可以处理负环的. 不过SPFA这种处理负环的方法自然比一般的Bellman Ford算法要慢点了. #include <stdio.h> #include <string.h> #include <limits.h> const int MAX_N = 501; const int MAX_M = 2501; const

POJ3259 Wormholes

Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 44261   Accepted: 16285 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 d

poj 3259 Wormholes (负权最短路,SPAF)

Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36641   Accepted: 13405 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 p

Poj 3259 Wormholes

1.Link: http://poj.org/problem?id=3259 2.Content: Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 32078   Accepted: 11651 Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A w

ACM: POJ 3259 Wormholes - SPFA负环判定

POJ 3259 Wormholes Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu 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 pa

[2016-04-03][POJ][3259][Wormholes]

时间:2016-04-03 20:22:04 星期日 题目编号:[2016-04-03][POJ][3259][Wormholes] 题目大意:某农场有n个节点,m条边(双向)和w个虫洞(单向),(走虫洞可以回到过去的时间),问能否和过去的自己相遇 分析: 题目意思就是给定一个带负权的图,问是否存在负圈, spfa_bfs spfa_dfs bellman_ford #include <vector> #include <queue> #include <algorithm&

POJ 3259 Wormholes(SPFA)

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! Eac

poj 3259 Wormholes 【SPFA&amp;amp;&amp;amp;推断负环】

Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36852   Accepted: 13502 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 p

poj Wormholes 【最短路径】【bellman_ford】

Wormholes 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 wor