zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    四大组件之BroadcastReceiver基础
    SQLiteOpenHelper与SQLiteDatabase的使用
    SharedPreferences实现保存用户名功能
    Fragment加载方式与数据通信
    ProgressBar、ProgessDialog用法解析
    GridView添加事件监听和常用属性解析
    ListView添加item的事件监听
    ArrayAdapter、SimpleAdapter简单用法
    MySQL入门笔记(二)
    MySQL入门笔记(一)
  • 原文地址:https://www.cnblogs.com/usedrosee/p/4337250.html
Copyright © 2011-2022 走看看