Advertisement
saske_7

dijkastra_cp.cpp

Jan 3rd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define bound(x,y , i , j) x >= 0 && x < i && y >= 0 && y < j
  6. #define mp make_pair
  7. #define pb push_back
  8. #define pii pair<int , int>
  9. #define M 2000
  10. #define rep(i , n) for(i = 0 ; i< n ;i++ )
  11. #define repi(i , n ) for(i = 0 ; i<= n ; i++ )
  12. #define mem(x , y ) memset(x , y , sizeof x )
  13. #define ff first
  14. #define ss second
  15. #define mx  999999999
  16. //int dx[] = { -1 ,+1, 0 , 0 , -1 , -1  , 1 , 1 };
  17. //int dy[] = { 0 , 0, +1, -1  , +1 , -1 , 1 , -1 };
  18.  
  19. //int dx[] = { 1 , 1, 2 , 2  , -1 , -1 , -2 , -2 }; // knight direction
  20. //int dy[] = { 2 , -2, +1, -1 ,2 , -2 , 1 , -1 };
  21.  
  22. vector<int > g[M+5] , cost[M+5 ] ;
  23. int dis[M+5] ;
  24.  
  25.  
  26. struct  myClass{
  27.     int u , w ;
  28.     myClass() ;
  29.     myClass(int u , int w){
  30.         this-> u = u ;
  31.         this-> w = w ;
  32.     }
  33.  
  34.     bool operator<(myClass x )
  35.     const {
  36.         return  this->w > x.w ;
  37.  
  38.     }
  39. };
  40.  
  41. void clr(){
  42. int i ; rep(i  , M ) g[i].clear();
  43.         rep(i , M ) cost[i].clear() ;
  44.         mem(dis, mx) ;
  45.  
  46.  
  47. }
  48.  
  49. void dijkastra(int start ,int end  ){
  50.  int i ,j , k ;
  51.     priority_queue<myClass >pq ;
  52.     rep(i , M ) dis[i ] = mx ;
  53.   //mem(dis , 10000);
  54.     pq.push(myClass(start , 0 ) );
  55.     dis[start] =  0;
  56.   //printf("hrer %d %d \n" , start , end);
  57.     while(!pq.empty()){
  58.         myClass x  = pq.top() ;
  59.         pq.pop();
  60.         int u = x.u ;
  61.  
  62.         if(u == end  ) return ;
  63.         rep(i , g[u].size() ){
  64.             int v =  g[u][i] ;
  65.     //  printf("out %d %d %d %d %d\n",u , v , dis[u] ,  cost[u][i] , dis[v]);
  66.  
  67.             if( dis[u] + cost[u][i ] < dis[v ] ){
  68.  
  69.           dis[v] =  dis[u] + cost[u][i ] ;
  70.       //  printf("in %d %d %d\n",u ,  v , dis[v]);
  71.                 pq.push(myClass(v , dis[v ] ) ) ;
  72.  
  73.             }
  74.  
  75.         }
  76.     }
  77.  
  78.  
  79. }
  80.  
  81. int main(){
  82.     freopen("in.txt", "r",stdin );
  83.  
  84.     int i , j , k , cs= 0 , tc ;
  85. //  priority_queue<myClass >  pq ;
  86.     scanf("%d ", &tc );
  87.     while(tc--){
  88.         clr() ;
  89.         int  qr , n ;
  90.         scanf("%d%d", &n , &qr ) ;
  91.         while(qr--){
  92.             int u ,v , w ;
  93.             scanf("%d %d %d" , &u , &v ,&w ) ;
  94.             g[u].pb(v) ;
  95.             g[v].pb(u) ;
  96.  
  97.             cost[u].pb(w);
  98.             cost[v].pb(w);
  99.  
  100.             }
  101.  
  102.  
  103.             dijkastra(1 , n ) ;
  104.  
  105.             if(dis[n] ==  mx ) printf("Case %d: Impossible\n" , ++cs  );
  106.             else printf("Case %d: %d\n",++cs,  dis[n] );
  107.  
  108.     }
  109.  
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement