Advertisement
Korotkodul

Dij A ok

Jun 8th, 2022 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int,int>
  11. #define vec vector
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v){
  17.     for (auto x: v) cout<<x<<' ';
  18.     cout<<"\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v){
  22.     for (auto x: v) cout<<x<<' ';
  23.     cout<<"\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v){
  28.     for (auto x: v) cv(x);
  29.     cout<<"\n";
  30. }
  31.  
  32. void cvb(vector <bool> v){
  33.     for (bool x: v) cout<<x<<' ';
  34.     cout<<"\n";
  35. }
  36.  
  37. void cvs(vector <string>  v){
  38.     for (auto a: v){
  39.         cout<<a<<"\n";
  40.     }
  41. }
  42.  
  43. const int inf = 2e9;
  44.  
  45. struct ed{
  46.     int fr,to,w;
  47. };
  48.  
  49.  
  50.  
  51. int main()
  52. {
  53.     ios::sync_with_stdio(0);
  54.     cin.tie(0);
  55.     cout.tie(0);
  56.     int n, start, finish;
  57.     cin>>n>>start>>finish;
  58.     start--; finish--;
  59.     vector <int> d(n, inf);
  60.     vector <vector <pii> > G(n);
  61.     for (int i = 0; i < n; ++i){
  62.         for (int j = 0; j < n;++j){
  63.             int x; cin>>x;
  64.             if (x == -1 || i == j) continue;
  65.             pii e = {j, x};
  66.             G[i].push_back(e);
  67.         }
  68.     }
  69.  
  70.     d[start]=0;
  71.     set <pii> Q;//расстояние, в-на
  72.     Q.insert({0, start});
  73.     //e = {v, l}
  74.     while (!Q.empty()){
  75.         int v = Q.begin()->second;
  76.         Q.erase(Q.begin());
  77.         for (pii e: G[v]){
  78.             //if (d[e.first] != inf) continue;
  79.             if (d[e.first] > d[v] + e.second){
  80.  
  81.                 Q.erase({d[e.first], e.first});
  82.                 d[e.first] = d[v] + e.second;
  83.                 Q.insert({d[e.first], e.first});
  84.             }
  85.         }
  86.     }
  87.     if (d[finish] == inf){
  88.         cout<<-1;
  89.         exit(0);
  90.     }
  91.     cout<<d[finish];
  92. }
  93.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement