MAGCARI

Bellman Ford

Aug 2nd, 2022
1,391
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.82 KB | None | 0 0
  1. /*
  2.     Task    : Bellman Ford
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 30 July 2022 [11:03]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. struct A{
  10.     int  u,v,w;
  11. };
  12. vector<A > edges;
  13. int dis[100010],dis2[100010];
  14. int main(){
  15.     int n,m,u,v,w;
  16.     cin >> n >> m;
  17.     for(int i=1;i<=m;i++){
  18.         scanf("%d %d %d",&u,&v,&w);
  19.         edges.push_back({u,v,w});
  20.     }
  21.     dis[0] = 0;
  22.     for(int i=1;i<n;i++)
  23.         dis[i] = 1e9;
  24.     for(int i=1;i<=n-1;i++)
  25.         for(auto x:edges)
  26.             if(dis[x.u] + x.w < dis[x.v])
  27.                 dis[x.v] = dis[x.u] + x.w;
  28.    
  29.     for(int i=0;i<n;i++)
  30.         dis2[i] = dis[i];
  31.     for(auto x:edges)
  32.         if(dis[x.u] + x.w < dis[x.v])
  33.             dis[x.v] = dis[x.u] + x.w;
  34.    
  35.     for(int i=0;i<n;i++){
  36.         if(dis[i] != dis2[i]){
  37.             printf("Negative weighted cycle detected!\n");
  38.             break;
  39.         }
  40.     }
  41.     printf("%d\n",dis[n-1]);
  42.     return 0;
  43. }
  44. /*
  45. 5 5
  46. 0 1 99
  47. 1 2 15
  48. 2 1 -42
  49. 2 3 10
  50. 0 4 -99
  51. */
Advertisement
Add Comment
Please, Sign In to add comment