zoukankan      html  css  js  c++  java
  • POJ 3259 Wormholes (Bellman_ford算法)

    题目链接:http://poj.org/problem?id=3259

    Wormholes
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 45077   Accepted: 16625

    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.
     
    题目大意:有一个农场有n块田地,m条路连接任意两条路(无向),w个虫洞(单向)回到t秒之前,现在需要你判断她从1到n,再从n回到1是否能遇到离开前的自己
    解题思路:由于题目的特殊性,只需要将穿越虫洞的时间存为负值然后用Bellman_ford算法判断是否存在负权值回路即可 如果存在说明能看到否则反之。
    AC代码:
     1 #include <stdio.h>
     2 #include <string.h>
     3 #define inf 9999999
     4 int dis[550];
     5 int p[550][550];
     6 int n,m,w,ans;
     7 struct edge
     8 {
     9     int x,y,z;
    10 }g[3000<<1];
    11 void add(int s,int e,int t)
    12 {
    13     g[ans].x = s;
    14     g[ans].y = e;
    15     g[ans].z = t;
    16     ans ++;
    17 }
    18 bool Bellman_ford()
    19 {
    20     int i,j;
    21     for (i = 1; i <= n; i ++)
    22         dis[i] = inf;
    23     dis[1] = 0;
    24 
    25     for (i = 1; i < n; i ++)
    26         for (j = 0; j < ans; j ++)
    27             if (dis[g[j].y] > dis[g[j].x]+g[j].z)
    28                 dis[g[j].y] = dis[g[j].x]+g[j].z;
    29 
    30     for (j = 0; j < ans; j ++) //遍历所有的边
    31         if (dis[g[j].y] > dis[g[j].x]+g[j].z)
    32             return false;
    33     return true;
    34 }
    35 int main ()
    36 {
    37     int s,e,t,i,j,f;
    38     scanf("%d",&f);
    39     while (f --)
    40     {
    41         ans = 0;
    42         scanf("%d%d%d",&n,&m,&w);
    43         for (i = 0; i < m; i ++)
    44         {
    45             scanf("%d%d%d",&s,&e,&t);
    46             add(s,e,t);
    47             add(e,s,t);
    48         }
    49         for (i = 0; i < w; i ++)
    50         {
    51             scanf("%d%d%d",&s,&e,&t);
    52             add(s,e,-t);
    53         }
    54         bool f = Bellman_ford();
    55         if (f)
    56             printf("NO
    ");
    57         else
    58             printf("YES
    ");
    59     }
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    模块三
    python的6种基本数据类型--字典
    python的6种基本数据类型--集合
    数据集之集合
    锚点使用
    JSON返回DateTime/Date('123123123')/解决办法
    JSON返回DateTime/Date('123123123')/解决办法
    设计模式-系列索引
    设计模式-系列索引
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/yoke/p/5866216.html
Copyright © 2011-2022 走看看