• POJ 3259 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

    题目大意:农夫有F个农场,每个农场里有一些路径和虫洞,路径是双向的,虫洞是单向的,经过路径时会消耗t的时间,经过虫洞时时间会倒退x秒,求有没有可能使得农夫能在经过一些路径和虫洞之后看到之前的自己
    思路:看到之前的自己就相当于是求图中有没有负环,对于虫洞我们将之权值修改为负数,在用一次SPFA即可

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 #include<queue>
     6 using namespace std;
     7 const int INF = 0x3f3f3f3f;
     8 int n, m, w;
     9 struct node{
    10     int to, cost;
    11     node() {}
    12     node(int a, int b) :to(a), cost(b) {}
    13 };
    14 vector<node>e[505];
    15 int dis[505], vis[505], f[505];
    16 bool SPFA(int s)
    17 {
    18     for (int i = 0; i <= n; i++) {
    19         dis[i] = INF;
    20         f[i] = 0; vis[i] = 0;
    21     }
    22     dis[s] = 0; f[s]++;
    23     vis[s] = 1; queue<int>Q;
    24     Q.push(s);
    25     while (!Q.empty()) {
    26         int t = Q.front(); Q.pop(); vis[t] = 0;
    27         for (int i = 0; i < e[t].size(); i++) {
    28             int tmp = e[t][i].to;
    29             if (dis[tmp] > dis[t] + e[t][i].cost) {
    30                 dis[tmp] = dis[t] + e[t][i].cost;
    31                 if (!vis[tmp]) {
    32                     vis[tmp] = 1;
    33                     Q.push(tmp);
    34                     if (++f[tmp] >= n)return false;
    35                 }
    36             }
    37         }
    38     }
    39     return true;
    40 }
    41 int main()
    42 {
    43     ios::sync_with_stdio(false);
    44     int T;
    45     cin >> T;
    46     while (T--) {
    47         for (int i = 1; i <= n; i++)e[i].clear();
    48         cin >> n >> m >> w;
    49         for (int a, b, c, i = 1; i <= m; i++) {
    50             cin >> a >> b >> c;
    51             e[a].push_back(node(b, c));
    52             e[b].push_back(node(a, c));
    53         }
    54         for (int a, b, c, i = 1; i <= w; i++) {
    55             cin >> a >> b >> c;
    56             e[a].push_back(node(b, -c));
    57         }
    58         if (!SPFA(1))cout << "YES" << endl;
    59         else cout << "NO" << endl;
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    Oracle 11g R2 常用配置与日志的文件位置
    DBA常用SQL之会话与等待事件
    SSH框架之Spring第三篇
    SSH框架之Spring第二篇
    SSH框架之Spring第一篇
    SSH框架之Struts2第三篇
    SSH框架之Struts2第一篇
    SSH框架之Struts2第二篇
    SSH框架之Hibernate第四篇
    SSH框架之Hibernate第三篇
  • 原文地址:https://www.cnblogs.com/wangrunhu/p/9501007.html
Copyright © 2020-2023  润新知