that_one_nigga_you_k

possivel solução da lista

Sep 10th, 2024
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include <limits>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = numeric_limits<int>::max();
  8. const int MAX_Q = 300;
  9.  
  10. int graph[MAX_Q][MAX_Q];
  11. int dist[MAX_Q];
  12. bool visited[MAX_Q];
  13.  
  14. void dijkstra(int start, int Q) {
  15.     for (int i = 0; i < Q; ++i) {
  16.         dist[i] = INF;
  17.     }
  18.     memset(visited, false, sizeof(visited));
  19.     dist[start] = 0;
  20.  
  21.     for (int i = 0; i < Q; ++i) {
  22.         int u = -1;
  23.         for (int j = 0; j < Q; ++j) {
  24.             if (!visited[j] && (u == -1 || dist[j] < dist[u])) {
  25.                 u = j;
  26.             }
  27.         }
  28.  
  29.         if (dist[u] == INF) break;
  30.  
  31.         visited[u] = true;
  32.  
  33.         for (int v = 0; v < Q; ++v) {
  34.             if (graph[u][v] != INF && dist[u] + graph[u][v] < dist[v]) {
  35.                 dist[v] = dist[u] + graph[u][v];
  36.             }
  37.         }
  38.     }
  39. }
  40.  
  41. int main() {
  42.     int Q, R, N;
  43.     cin >> Q >> R >> N;
  44.  
  45.     for (int i = 0; i < Q; ++i) {
  46.         for (int j = 0; j < Q; ++j) {
  47.             graph[i][j] = (i == j) ? 0 : INF;
  48.         }
  49.     }
  50.  
  51.     for (int i = 0; i < R; ++i) {
  52.         int A, B, M;
  53.         cin >> A >> B >> M;
  54.         graph[A][B] = M;
  55.     }
  56.  
  57.     for (int i = 0; i < N; ++i) {
  58.         int type;
  59.         cin >> type;
  60.  
  61.         if (type == 1) {
  62.             int A, B, M;
  63.             cin >> A >> B >> M;
  64.             graph[A][B] = M;
  65.         } else if (type == 2) {
  66.             int A, B;
  67.             cin >> A >> B;
  68.  
  69.             dijkstra(A, Q);
  70.  
  71.             if (dist[B] == INF) {
  72.                 cout << -1 << endl;
  73.             } else {
  74.                 cout << dist[B] << endl;
  75.             }
  76.         }
  77.     }
  78.  
  79.     return 0;
  80. }
  81.  
Add Comment
Please, Sign In to add comment