zoukankan      html  css  js  c++  java
  • poj 3259 Wormholes

                                                                                                          Wormholes
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 45424   Accepted: 16771

    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.
     
    题意:农夫约翰想要通过虫洞回到过去,问有没有这么一种走法使得他能够回到过去。
    思路:就是一个判断有无负圈的问题,存在负圈,说明能回到过去,可以选择用Bell_Ford算法。
    AC代码:
    #define _CRT_SECURE_NO_DEPRECATE
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N_MAX = 505,E_MAX=(2500+200+5)*2;
    struct edge{
        int from, to, cost;
    };
    int d[N_MAX];
    int V, E;
    edge es[E_MAX];
    bool find_negative_loop() {
        memset(d, 0, sizeof(d));
        for (int i = 0;i < V;i++) {
            for (int j = 0;j < E;j++) {
                edge e = es[j];
                if (d[e.to] > d[e.from] + e.cost) {
                    d[e.to] = d[e.from] + e.cost;
                    if (i == V - 1)return true;
                }
            }
        }
        return false;
    }
    int main() {
        int F,N,M,W;
        cin >> F;
        while (F--) {
            scanf("%d%d%d",&N,&M,&W);
            V = N;E =0;
            for (int i = 0;i < M;i++) {
                int from, to, cost;
                scanf("%d%d%d",&from ,&to,&cost);
                from--;
                to--;
                es[E].from = from;
                es[E].to = to;
                es[E].cost = cost;
                E++;
                es[E].from = to;//////无向图,双向的路
                es[E].to = from;
                es[E].cost = cost;
                E++;
            }
            for (int i = 0;i < W;i++) {
                int from, to, cost;
                scanf("%d%d%d", &from, &to, &cost);
                from--;
                to--;
                es[E].from = from;
                es[E].to = to;
                es[E].cost =-cost;
                E++;
            }
            if (find_negative_loop()) {
                printf("YES
    ");
            }
            else printf("NO
    ");
        }
        return 0;
    }
     
  • 相关阅读:
    linq.js
    ES6入门
    Visual Studio Code之常备快捷键
    JavaScript——数组
    谈程序员的出路
    优秀博文
    多媒体封装格式详解---MP4
    音视频文件分析工具
    offsetof(s,m)解析
    GCC 提供的原子操作
  • 原文地址:https://www.cnblogs.com/ZefengYao/p/5953002.html
Copyright © 2011-2022 走看看