zoukankan      html  css  js  c++  java
  • poj3259

                                                                                           Wormholes
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 24910   Accepted: 8883

    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.
     
     
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<string>
    using namespace std;
    const int inf = 10000000;
    const int maxn =3000;
    int dist[maxn],i,j,n,m,w,u,v,e,x,y,z,cnt,k;
    struct node
    {
        int u,v,w;
    }edge[maxn*2];
    int bellman()
    {
        for(i=0;i<n;i++)
        {
            dist[i] = inf;
        }
        dist[x] = 0;
        for(k=1;k<n;k++)
        {
            for(i=0;i<cnt;i++)
            {
                if(dist[edge[i].u]!=inf && edge[i].w+dist[edge[i].u]<dist[edge[i].v])
                {
                    dist[edge[i].v] = edge[i].w + dist[edge[i].u];
                }
            }
        }
        for(i=0;i<cnt;i++)
        {
                if(edge[i].w+dist[edge[i].u]<dist[edge[i].v])
                {
                    return 1;
                }
                
        }
        return 0;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d %d %d",&n,&m,&w);
            cnt =0;
            for(i=0;i<m;i++)
            {
                scanf("%d %d %d",&u,&v,&e);
                edge[cnt].u= u;
                edge[cnt].v = v;
                edge[cnt++].w = e;
                edge[cnt].u = v;
                edge[cnt].v = u;
                edge[cnt++].w=e;
            }
            for(i=0;i<w;i++)
            {
                scanf("%d %d %d",&x,&y,&z);
                edge[cnt].u = x;
                edge[cnt].v = y;
                edge[cnt++].w = -z;
            }
            int num = bellman();
            if(num)
            {
                printf("YES
    ");
            }
            else
                printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    数据库优化方案之分库分表
    聊聊ThreadLocal源码(基于JDK1.8)
    HashMap扩容死循环问题
    Synchronized偏向锁和轻量级锁的升级
    【Java并发编程之深入理解】Synchronized的使用
    ConcurrentHashMap 1.8为什么要使用CAS+Synchronized取代Segment+ReentrantLock
    面试必备技能:HashMap哪些技术点会被经常问到?
    序列键生成器及单例多例模式
    Effective.Java第1-11条
    抽象工厂(AbstractFactory)模式
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/3225293.html
Copyright © 2011-2022 走看看