Advertisement
slik1977

Evtyukhov_Tipovik4_ex7c

May 27th, 2021
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
  2. #pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,popcnt,tune=native")
  3. #pragma GCC target("avx,avx2")
  4. #pragma GCC target ("avx2")
  5. #pragma GCC optimize ("O3")
  6. #pragma GCC optimize ("unroll-loops")
  7. #pragma GCC optimize("Ofast")
  8. #include <bits/stdc++.h>
  9. #include <windows.h>
  10. using namespace std;
  11. int n = 6;
  12. int m = 12;
  13. int INF = 1e9 - 1;
  14. int graph[6][6]; //задали и считали граф
  15.  
  16. vector<int> Djikstra (int s){
  17.     vector<int> d(n, INF), p(n);
  18.     d[s] = 0;
  19.     vector<char> u(n);
  20.     for (int i = 0; i < n; ++i) {
  21.         int v = -1;
  22.  
  23.         for (int j = 0; j < n; ++j)
  24.             if (!u[j] && (v == -1 || d[j] < d[v]))
  25.                 v = j;
  26.  
  27.         if (d[v] == INF)
  28.             break;
  29.  
  30.         u[v] = true;
  31.  
  32.         for (size_t j = 0; j < n; ++j){
  33.             if (graph[v][j] != INF && graph[v][j] != 0){
  34.                 if (d[v] + graph[v][j] < d[j]) {
  35.                     d[j] = d[v] + graph[v][j];
  36.                     p[j] = v;
  37.                 }
  38.             }
  39.         }
  40.     }
  41.     return d;
  42.  
  43. }
  44.  
  45.  
  46. int main(){
  47.  
  48.     for (int i = 0; i < n; i++){
  49.         for (int j = 0; j < n; j++){
  50.             graph[i][j] = INF;
  51.         }
  52.     }
  53.     for (int i = 0; i < n; i++)
  54.         graph[i][i] = 0;
  55.  
  56.  
  57.     for (int i = 0; i < m; i++){
  58.         int x, y, w;
  59.         cin >> x >> y >> w;
  60.         x--;
  61.         y--;
  62.         graph[x][y] = w;
  63.         graph[y][x] = w;
  64.     }
  65.  
  66.     vector<int> ans = Djikstra(3);
  67.     for (auto x: ans) cout << x << endl;
  68.  
  69. }
  70.  
  71. /*
  72. 1 2 2
  73. 1 5 6
  74. 1 6 2
  75. 2 3 2
  76. 2 4 4
  77. 2 6 4
  78. 3 4 7
  79. 3 5 5
  80. 3 6 5
  81. 4 5 4
  82. 4 6 6
  83. 5 6 2
  84. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement