zoukankan      html  css  js  c++  java
  • G

    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.. MW+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 backT 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.
     
    题目意思; 有一个农场中有农田和虫洞,虫洞可以倒退一段时间,判断一个人能否回到出发前;
    解题思路:判断是否存在负权回路;
     
     1 #include<iostream>
     2 #include <string.h>
     3 #include <math.h>
     4 #include <stdio.h>
     5 using namespace std;
     6 
     7 const int MAX = 10000 + 100;
     8 long long MAX1 = 1e10;
     9 long long dist[MAX];
    10 int add;
    11 int n1,n2,n3;
    12 
    13 struct S
    14 {
    15     int a,b;
    16      int len;
    17 };
    18 S Map[MAX];
    19 bool B()
    20 {
    21     for(int i = 1;i <= n1;i++)
    22         dist[i] = MAX1;
    23     dist[1] = 0;
    24 
    25     for(int i =1;i <=n1;i++)
    26     {
    27         bool flag = false;
    28         for(int i = 0;i < add;i++)
    29         {
    30             if( dist[ Map[i].b ] > dist[Map[i].a] + Map[i].len )
    31             {
    32                 dist[ Map[i].b ] = dist[Map[i].a] + Map[i].len;
    33                 flag = true;
    34             }
    35 
    36         }
    37         if(!flag)
    38             break;
    39     }
    40 
    41     for(int i = 0;i <add;i++)
    42         if(dist[ Map[i].b ] > dist[Map[i].a] + Map[i].len)
    43             return true;
    44     return false;
    45 
    46 }
    47 
    48 
    49 int main()
    50 {
    51     int N;
    52     cin>>N;
    53 
    54     while(N--)
    55     {
    56         cin>>n1>>n2>>n3;
    57 
    58         add = 0;
    59         for(int i =1;i <= n2;i++)
    60         {
    61             int x,y,len;
    62             cin>>x>>y>>len;
    63             Map[add].a = x;Map[add].b=y;Map[add++].len = len;
    64             Map[add].a = y;Map[add].b=x;Map[add++].len = len;
    65 
    66         }
    67         for(int i = 1;i <= n3;i++)
    68         {
    69             int x,y,len;
    70             cin>>x>>y>>len;
    71              Map[add].a = x;Map[add].b=y;Map[add++].len = -len;
    72         }
    73 
    74         if( B() )
    75             cout<<"YES"<<endl;
    76         else
    77             cout<<"NO"<<endl;
    78 
    79     }
    80 
    81 
    82     return 0;
    83 }
  • 相关阅读:
    git 提交
    Git提交出现 Everything up-to-date
    vscode 记住git用户密码
    git 将本地项目关联到远程仓库
    ubuntu19.04 安装workbench
    修改vscode终端样式
    python3练习
    C#实现MJPEG服务器
    在WPF中使用AForge控件
    FtpWebRequest.UsePassive属性:设置FTP工作模式
  • 原文地址:https://www.cnblogs.com/a2985812043/p/7304886.html
Copyright © 2011-2022 走看看