Ankit_132

E

Oct 21st, 2023
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll     long long
  6.  
  7. int main()
  8. {
  9.     ll int n, a, b, c;
  10.     cin>>n>>a>>b>>c;
  11.  
  12.     vector<vector<ll int>> D(n, vector<ll int> (n));
  13.     for(int i=0; i<n; i++)  for(int j=0; j<n; j++)  cin>>D[i][j];
  14.  
  15.     array<ll int, 2> tmp;
  16.     tmp[0] = 1e18;
  17.     tmp[1] = 1e18;
  18.  
  19.     vector<array<ll int, 2>> dist(n, tmp);
  20.     dist[0][0] = 0;
  21.     dist[0][1] = 0;
  22.  
  23.     set<array<ll int, 3>> sp;
  24.     sp.insert({dist[0][0], 0, 0});
  25.  
  26.     while(sp.size())
  27.     {
  28.         auto [pr, u, s] = *sp.begin();
  29.         sp.erase(sp.begin());
  30.  
  31.         for(int v=0; v<n; v++)
  32.         {
  33.             if(s == 0)
  34.             {
  35.                 if(dist[v][0] > pr+D[u][v]*a)
  36.                 {
  37.                     dist[v][0] = pr+D[u][v]*a;
  38.                     sp.insert({dist[v][0], v, 0});
  39.                 }
  40.  
  41.                 if(dist[v][1] > pr + D[u][v]*b + c)
  42.                 {
  43.                     dist[v][1] = pr + D[u][v]*b + c;
  44.                     sp.insert({dist[v][1], v, 1});
  45.                 }
  46.             }
  47.             else
  48.             {
  49.                 if(dist[v][1] > pr + D[u][v]*b + c)
  50.                 {
  51.                     dist[v][1] = pr + D[u][v]*b + c;
  52.                     sp.insert({dist[v][1], v, 1});
  53.                 }
  54.             }
  55.         }
  56.     }
  57.  
  58.     cout<<min(dist[n-1][0], dist[n-1][1])<<"\n";
  59. }
  60.  
Advertisement
Add Comment
Please, Sign In to add comment