Advertisement
Nik_Perepelov

5 контест я

Oct 12th, 2021 (edited)
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. // 1 задача
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. struct edge {
  8.     int fr, to, weight;
  9.  
  10.     edge(int _fr = 0, int _to = 0, int _weight = 0) {
  11.         fr = _fr;
  12.         to = _to;
  13.         weight = _weight;
  14.     }
  15. };
  16.  
  17. vector<edge> g;
  18. const int INF = 1e9;
  19. int n, m, k;
  20.  
  21. void ford_bellman(int v, int finish) {
  22.     vector<int> d(n, INF);
  23.     vector<int> d_(n, INF);
  24.     d[v] = 0;
  25.     for (int i = 0; i < k; i++) {
  26.         for (int j = 0; j < m; j++) {
  27.             if (d[g[j].fr] < INF) {
  28.                 d_[g[j].to] = min(d_[g[j].to], d[g[j].fr] + g[j].weight);
  29.             }
  30.         }
  31.         d = d_;
  32.     }
  33.     if (d[finish] == INF) {
  34.         cout << "-1";
  35.     } else {
  36.         cout << d[finish];
  37.     }
  38. }
  39.  
  40.  
  41. int main() {
  42.     int s, f;
  43.     cin >> n >> m >> k >> s >> f;
  44.     s--;
  45.     f--;
  46.  
  47.     g = vector<edge>(m);
  48.  
  49.     for (int i = 0; i < m; i++) {
  50.         int fr, to, weight;
  51.         cin >> fr >> to >> weight;
  52.         g[i].fr = fr - 1;
  53.         g[i].to = to - 1;
  54.         g[i].weight = weight;
  55.     }
  56.  
  57.     ford_bellman(s, f);
  58.  
  59.     return 0;
  60. }
  61.  
  62. // 2 задача
  63. #include <iostream>
  64. #include <vector>
  65.  
  66. using namespace std;
  67.  
  68. int n;
  69. vector<vector<int>> graph;
  70.  
  71. void floidWarshall(){
  72.     for (int k = 0; k < n; k++){
  73.         for (int i = 0; i < n; i++){
  74.             for (int j = 0; j < n; j++){
  75.                 graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]);
  76.             }
  77.         }
  78.     }
  79. }
  80.  
  81. int main() {
  82.     cin >> n;
  83.     graph = vector<vector<int>> (n, vector<int>(n));
  84.     for (int i = 0; i < n; i++){
  85.         for (int j = 0; j < n; j++){
  86.             cin >> graph[i][j];
  87.         }
  88.     }
  89.  
  90.     floidWarshall();
  91.  
  92.     for (int i = 0; i < n; i++){
  93.         for (int j = 0; j < n; j++){
  94.             cout << graph[i][j] << ' ';
  95.         }
  96.         cout << '\n';
  97.     }
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement