Advertisement
hpnq

дейкстра

May 20th, 2024
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.48 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. //speed coding handle
  3.  
  4. #define mp make_pair
  5. #define cve(tpy) for (auto i : tpy) {for(auto j : i){cout << j << " ";  }cout << "\n";} ;
  6. #define f first
  7. #define s second
  8. #define loop(i, x, n) for (int i = x; i < n; i++)
  9. #define joop(x, n) for (ll j = x; j < n; j++)
  10. #define lp(n) for (ll i = 0; i < n; i++)
  11. #define err cout << "ERROR" << endl;
  12. #define all(x) x.begin(), x.end()
  13. #define pb push_back
  14. #define sz(x) x.size()
  15. #define rndm rng()
  16.  
  17. // types
  18. #define pii pair<int, int>
  19. #define pll pair<ll, ll>
  20. #define vvi vector<vector<int>>
  21. #define vvll vector<vector<ll>>
  22. typedef long long ll;
  23. typedef long double ld;
  24.  
  25. // types of data
  26. #define inf 1000000000
  27. #define infll 1000000000000000000
  28. #define INF ll(1e9)
  29.  
  30. #define md 998244353
  31. #define mod 1000000009
  32. //#define K 239017
  33.  
  34. #define DEBUG 1
  35. using namespace std;
  36. mt19937_64 rng(113113);
  37. uniform_int_distribution<ll> drist;
  38. //const int INF = std::numeric_limits<int>::max();
  39. const int MAX_N = 50;
  40.  
  41. int N; // количество локаций
  42. float graph[MAX_N][MAX_N]; // матрица смежности
  43. float speed[3]; // скорости роботов
  44.  
  45. void dijkstra(int start, float dist[], float r_speed) {
  46.     bool visited[MAX_N] = {false};
  47.     for (int i = 0; i < N; ++i) {
  48.         dist[i] = INF;
  49.     }
  50.     dist[start] = 0;
  51.  
  52.     for (int i = 0; i < N; ++i) {
  53.         int u = -1;
  54.         for (int j = 0; j < N; ++j) {
  55.             if (!visited[j] && (u == -1 || dist[j] < dist[u])) {
  56.                 u = j;
  57.             }
  58.         }
  59.  
  60.         if (dist[u] == INF) break;
  61.         visited[u] = true;
  62.  
  63.         for (int v = 0; v < N; ++v) {
  64.             if (graph[u][v] && dist[u] + graph[u][v] / r_speed < dist[v]) {
  65.                 dist[v] = dist[u] + graph[u][v]/r_speed;
  66.             }
  67.         }
  68.     }
  69. }
  70.  
  71. int main() {
  72.     freopen("text.txt", "r", stdin);
  73.     int m;
  74.     cin >> N >> m;
  75.  
  76.     for (int i = 0; i < N; ++i) {
  77.         for (int j = 0; j < N; ++j) {
  78.             cin >> graph[i][j];
  79.         }
  80.     }
  81.  
  82. //    int I1, I2, I3;
  83. //    cin >> I1 >> I2 >> I3;
  84. //    cin >> speed[0] >> speed[1] >> speed[2];
  85.     float mind = inf;
  86.     int I[3];
  87.     loop(i, 0, m){
  88.         cin >> I[i];
  89.     }
  90.     loop(i, 0, m){
  91.         cin >> speed[i];
  92. //        speed[i] /=2;
  93.     }
  94.     float distI1[MAX_N], distI2[MAX_N], distI3[MAX_N];
  95.     float d[3][MAX_N];
  96. //    cout << I[0] << " ";
  97.     loop(i, 0, m){
  98.         dijkstra(I[i], d[i], speed[i]);
  99.     }
  100. //    return 1;
  101. //    err
  102.  
  103. //    dijkstra(I[0], distI1, (float)speed[0]);
  104. //    dijkstra(I[1], distI2, (float)speed[1]);
  105. //    dijkstra(I[2], distI3, (float)speed[2]);
  106.     loop(p, 0, N) {
  107.         float t[3];
  108.         float middleware = 1;
  109.  
  110.         loop(i, 0, m){
  111.             float dis = d[i][p];
  112.             t[i] = dis;
  113.             middleware = max(middleware, dis);
  114.         }
  115.         if(t[0] == t[1] or t[0] == t[2] or t[1] == t[2]){
  116.             mind = min(mind, middleware);
  117.         }
  118.         continue;
  119.         float dist1 = d[0][p];
  120.         float dist2 = d[1][p];
  121.         float dist3 = d[2][p];
  122.         if (dist1 == dist2 or dist1 == dist3 or dist2 == dist3) {// если пришли в 1 место в 1 время
  123.             if (dist1 == dist2 and dist2 == dist3) {
  124.                 mind = min(mind, dist1); // в 1 месте
  125.             } else {
  126.                 mind = min(mind, max(max(dist1, dist2), dist3));
  127.             }
  128.         }
  129.     }
  130.     if(mind == inf){
  131.         cout << "Never meet\n";
  132.         return 1;
  133.     }
  134.     cout << "Min dist for robots:" << mind << endl;
  135.  
  136.     return 1;
  137. //    loop(i, 1, 3){
  138. //        loop(j, 1, 3){
  139. //            loop(k, 1, 3){
  140. //                float distI1[MAX_N], distI2[MAX_N], distI3[MAX_N];
  141. ////                err
  142. //
  143. //                dijkstra(I1, distI1, (float)i);
  144. //                dijkstra(I2, distI2, (float)j);
  145. //                dijkstra(I3, distI3, (float)k);
  146. //
  147. //                loop(p, 0, N){
  148. //                    float dist1 = distI1[p];
  149. //                    float dist2 = distI2[p];
  150. //                    float dist3 = distI3[p];
  151. //                    if(dist1 == dist2 or dist1 == dist3 or dist2 == dist3){// если пришли в 1 место в 1 время
  152. //                        if(dist1 == dist2 and dist2 == dist3){
  153. //                            mind = min(mind, dist1);
  154. //                        }else{
  155. //                            mind = min(mind, max(max(dist1, dist2), dist3));
  156. //                        }
  157. //                    }
  158. //                }
  159. //            }
  160. //        }
  161. //    }
  162. //    cout << "Min dist for all robots:" << mind;
  163.  
  164. //    if (dist1 == INF && dist2 == INF && dist3 == INF) {
  165. //        std::cout << "Meeting of all robots is not possible." << std::endl;
  166. //    } else {
  167. //        int min_dist = std::min({dist1, dist2, dist3});
  168. //        std::cout << "Minimum distance for all robots to meet: " << min_dist << std::endl;
  169. //        if (min_dist == dist1) {
  170. //            std::cout << "Shortest path is from robot starting at location " << I1 << std::endl;
  171. //        } else if (min_dist == dist2) {
  172. //            std::cout << "Shortest path is from robot starting at location " << I2 << std::endl;
  173. //        } else {
  174. //            std::cout << "Shortest path is from robot starting at location " << I3 << std::endl;
  175. //        }
  176. //    }
  177.  
  178.     return 0;
  179. }
  180. //int main() {
  181. //    ios::sync_with_stdio(0);
  182. //    cin.tie(0);
  183. //#ifdef DEBUG
  184. ////    freopen("output.txt", "w", stdout);
  185. //#endif
  186. //    solve();
  187. //    return 1;
  188. //}
  189. //
  190.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement