zoukankan      html  css  js  c++  java
  • E

     1 //bellman_ford判断负环
     2 #include <vector>
     3 #include <iostream>
     4 #include <cstring>
     5 #include <algorithm>
     6 using namespace std;
     7 
     8 const int maxn = 200 + 5;
     9 
    10 int n,m;
    11 double v;
    12 struct node{
    13     int u, v;
    14     double r,c;
    15 }p[maxn];
    16 
    17 double dis[maxn];
    18 int cnt;
    19 
    20 bool bellman_ford(int x){
    21     memset(dis, 0, sizeof(dis));
    22     dis[x] = v;
    23     for(int i = 1;i < n;i++){
    24         bool flag = true;
    25         for(int j = 0;j < cnt;j++){
    26             int aa = p[j].u;
    27             int bb = p[j].v;
    28             double rr = p[j].r;
    29             double cc = p[j].c;
    30             if(dis[bb] < (dis[aa] - cc)*rr){
    31                 dis[bb] = (dis[aa] - cc)*rr;
    32                 flag = false;
    33             }
    34         }
    35         if(flag)
    36             break;
    37     }
    38 
    39     //判断出现负环
    40     for(int i = 0; i< cnt;i++)
    41         if( dis[p[i].v] < (dis[p[i].u]-p[i].c)*p[i].r)
    42             return true;
    43     return false;
    44 }
    45 
    46 int main(){
    47     int s;
    48     cin >> n >> m >> s >>v;
    49     cnt = 0;
    50     while(m--){
    51         int a, b;
    52         double c1,r1,c2,r2;
    53         cin >> a >> b >> c1 >> r1 >> c2 >> r2;
    54         p[cnt].u = a, p[cnt].v = b, p[cnt].r = c1, p[cnt++].c = r1;
    55         p[cnt].u = b, p[cnt].v = a, p[cnt].r = c2, p[cnt++].c = r2;
    56     }
    57     if(bellman_ford(s))
    58         cout << "YES" << endl;
    59     else
    60         cout << "NO" << endl;
    61 
    62     return 0;
    63 }
  • 相关阅读:
    C#学习(四)
    C#学习(三)
    sqlserver基本操作
    ado.net(1)
    wpf的学习日志(一)
    C#学习(二)
    三大范式
    存储过程
    事务
    范文模板
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/9021673.html
Copyright © 2011-2022 走看看