• nyoj 天下第一 (spfa)


    要求路径长度大于一,判断出环即可结束。。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<string>
     6 #include<queue>
     7 #include<algorithm>
     8 #include<map>
     9 #include<iomanip>
    10 #include<climits>
    11 #include<string.h>
    12 #include<cmath>
    13 #include<stdlib.h>
    14 #include<vector>
    15 #include<set>
    16 #define INF 1e7
    17 #define MAXN 100010
    18 #define maxn 1000010
    19 #define Mod 1000007
    20 #define N 1010
    21 using namespace std;
    22 typedef long long LL;
    23 
    24 struct node{ int x; double w; };
    25 vector<node> G[1010];
    26 int u, v;
    27 double w;
    28 int n, m;
    29 int T;
    30 int cnt[555];
    31 int vis[555];
    32 double dis[555];
    33 
    34 bool  spfa()
    35 {
    36     queue<node> q;
    37     q.push({ 1, 0 });
    38     vis[1] = 1;
    39     dis[1] = 1;
    40     while (!q.empty()){
    41         node now = q.front();
    42         q.pop();
    43         vis[now.x] = 0;
    44         for (int i = 0; i < G[now.x].size(); ++i) {
    45             node v = G[now.x][i];
    46             if (dis[now.x] * v.w > dis[v.x]) {
    47                 dis[v.x] = dis[now.x] * v.w;
    48                 if (!vis[v.x]) {
    49                     vis[v.x] = 1;
    50                     cnt[v.x]++;
    51                     q.push({ v.x, dis[v.x] });
    52                     if (cnt[v.x] >= n) return true;
    53                 }
    54             }
    55         }
    56     }
    57     return false;
    58 }
    59 
    60 void init()
    61 {
    62     memset(dis,0,sizeof(dis));
    63     memset(vis,0,sizeof(vis));
    64     memset(cnt,0,sizeof(cnt));
    65     for (int i = 0; i <= n; ++i)
    66         G[i].clear();
    67 }
    68 
    69 void run()
    70 {
    71     cin >> n >> m;
    72     init();
    73     for (int i = 0; i < m; ++i) {
    74         cin >> u >> w >> v;
    75         G[u].push_back({v,w});
    76     }
    77     if (spfa()) puts("Yes");
    78     else puts("No");
    79 }
    80 
    81 int main()
    82 {
    83     cin >> T;
    84     while (T--)
    85         run();
    86     //system("pause");
    87     return 0;
    88 }
  • 相关阅读:
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周实验总结&学习总结
    关于我
    各种公告

    笔记 综合
    多项式全家桶
    FFT,NTT 笔记
    省选复习
  • 原文地址:https://www.cnblogs.com/usedrosee/p/4337250.html
Copyright © 2020-2023  润新知