Advertisement
a_pramanik

Bellman Ford

Jan 18th, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. ///:-)
  2. #include <bits/stdc++.h>
  3. #define pb push_back
  4. #define ll long long int
  5. #define inf 2000000000
  6. #define infLL 9000000000000000000
  7. #define infULL 18446744073709551615
  8. #define Aktaruzzaman using
  9. #define pi (2.0*acos(0.0))
  10. #define Pramanik namespace std;
  11. #define vsort(v)   sort(v.begin(),v.end())
  12. #define ull unsigned long long int
  13. #define mem(a, b) memset(a, b, sizeof a)
  14. #define cf 100009
  15. #define MOD 1000000007
  16. #define pii pair<int, int>
  17.  
  18. //int dx[]={0,1,0,-1};
  19. //int dy[]={1,0,-1,0};
  20. //int dx[]={1,1,0,-1,-1,-1,0,1};
  21. //int dy[]={0,1,1,1,0,-1,-1,-1};
  22.  
  23. template <class T> inline T gcd(T a,T b){if(b==0)return a;return gcd(b,a%b);}
  24. template< class T > inline T lcm(T a,T b) {a=abs(a);b=abs(b); return (a/gcd(a,b))*b;}
  25. template <class T> inline T is_prime(T a){if(a<2|a==4)return false;if(a==2||a==3||a==5)return true; T g=(T)sqrt(a)+1; for(T i=2; i<=g; i++){if(a%i==0)return false;}return false;}
  26. template <class T> inline T bigmod(T n,T p,T m){if(p==0)return 1; if(p%2)return ((n%m)*bigmod(n,p-1,m))%m; else {T c=bigmod(n,p/2,m);return ((c%m)*(c%m))%m;}}
  27.  
  28. Aktaruzzaman Pramanik
  29.  
  30.  
  31.  
  32. int main()
  33. {
  34.     //freopen("input.txt","r",stdin)
  35.     //freopen("output.txt","w",stdout)
  36.  
  37.     int dis[100];
  38.     int cost[101][101];
  39.     vector<int>a[100];
  40.     int n, i, j, k, x, y, m, c, src;
  41.  
  42.     scanf("%d%d", &n, &m);
  43.  
  44.     for(i=1; i<=m; i++){
  45.         scanf("%d%d%d", &x, &y, &c);
  46.         a[x].pb(y);
  47.         a[y].pb(x);
  48.         cost[x][y]=c;
  49.         cost[y][x]=c;
  50.     }
  51.  
  52.     for(i=1; i<=n; i++)dis[i]=inf;
  53.  
  54.     scanf("%d", &src);
  55.     dis[src]=0;
  56.  
  57.     for(i=1; i<n; i++){
  58.  
  59.         for(j=1; j<=m; j++){
  60.             for(k=0; k<a[j].size(); k++){
  61.                 y = a[j][k];
  62.                 if(dis[y]>cost[j][y]+dis[j]){
  63.                     dis[y]=cost[j][y]+dis[j];
  64.                 }
  65.             }
  66.         }
  67.  
  68.     }
  69.  
  70.     int flg=0;
  71.  
  72.     for(j=1; j<=m; j++){
  73.             for(k=0; k<a[j].size(); k++){
  74.                 y = a[j][k];
  75.                 if(dis[y]>cost[j][y]+dis[j]){
  76.                         flg=1;
  77.                     cout<<"Neg Cycle\n"<<endl;
  78.                     break;
  79.                 }
  80.             }
  81.             if(flg)break;
  82.         }
  83.     if(!flg)printf("NO NEGATIVE CYCLE\n");
  84.     for(i=1; i<=n; i++)a[i].clear();
  85.  
  86.     return main();
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement