Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bits/stdc++.h"
- //speed coding handle
- #define mp make_pair
- #define cve(tpy) for (auto i : tpy) {for(auto j : i){cout << j << " "; }cout << "\n";} ;
- #define f first
- #define s second
- #define loop(i, x, n) for (int i = x; i < n; i++)
- #define joop(x, n) for (ll j = x; j < n; j++)
- #define lp(n) for (ll i = 0; i < n; i++)
- #define err cout << "ERROR" << endl;
- #define all(x) x.begin(), x.end()
- #define pb push_back
- #define sz(x) x.size()
- #define rndm rng()
- // types
- #define pii pair<int, int>
- #define pll pair<ll, ll>
- #define vvi vector<vector<int>>
- #define vvll vector<vector<ll>>
- typedef long long ll;
- typedef long double ld;
- // types of data
- #define inf 1000000000
- #define infll 1000000000000000000
- #define INF ll(1e9)
- #define md 998244353
- #define mod 1000000009
- //#define K 239017
- #define DEBUG 1
- using namespace std;
- mt19937_64 rng(113113);
- uniform_int_distribution<ll> drist;
- //const int INF = std::numeric_limits<int>::max();
- const int MAX_N = 50;
- int N; // количество локаций
- float graph[MAX_N][MAX_N]; // матрица смежности
- float speed[3]; // скорости роботов
- void dijkstra(int start, float dist[], float r_speed) {
- bool visited[MAX_N] = {false};
- for (int i = 0; i < N; ++i) {
- dist[i] = INF;
- }
- dist[start] = 0;
- for (int i = 0; i < N; ++i) {
- int u = -1;
- for (int j = 0; j < N; ++j) {
- if (!visited[j] && (u == -1 || dist[j] < dist[u])) {
- u = j;
- }
- }
- if (dist[u] == INF) break;
- visited[u] = true;
- for (int v = 0; v < N; ++v) {
- if (graph[u][v] && dist[u] + graph[u][v] / r_speed < dist[v]) {
- dist[v] = dist[u] + graph[u][v]/r_speed;
- }
- }
- }
- }
- int main() {
- freopen("text.txt", "r", stdin);
- int m;
- cin >> N >> m;
- for (int i = 0; i < N; ++i) {
- for (int j = 0; j < N; ++j) {
- cin >> graph[i][j];
- }
- }
- // int I1, I2, I3;
- // cin >> I1 >> I2 >> I3;
- // cin >> speed[0] >> speed[1] >> speed[2];
- float mind = inf;
- int I[3];
- loop(i, 0, m){
- cin >> I[i];
- }
- loop(i, 0, m){
- cin >> speed[i];
- // speed[i] /=2;
- }
- float distI1[MAX_N], distI2[MAX_N], distI3[MAX_N];
- float d[3][MAX_N];
- // cout << I[0] << " ";
- loop(i, 0, m){
- dijkstra(I[i], d[i], speed[i]);
- }
- // return 1;
- // err
- // dijkstra(I[0], distI1, (float)speed[0]);
- // dijkstra(I[1], distI2, (float)speed[1]);
- // dijkstra(I[2], distI3, (float)speed[2]);
- loop(p, 0, N) {
- float t[3];
- float middleware = 1;
- loop(i, 0, m){
- float dis = d[i][p];
- t[i] = dis;
- middleware = max(middleware, dis);
- }
- if(t[0] == t[1] or t[0] == t[2] or t[1] == t[2]){
- mind = min(mind, middleware);
- }
- continue;
- float dist1 = d[0][p];
- float dist2 = d[1][p];
- float dist3 = d[2][p];
- if (dist1 == dist2 or dist1 == dist3 or dist2 == dist3) {// если пришли в 1 место в 1 время
- if (dist1 == dist2 and dist2 == dist3) {
- mind = min(mind, dist1); // в 1 месте
- } else {
- mind = min(mind, max(max(dist1, dist2), dist3));
- }
- }
- }
- if(mind == inf){
- cout << "Never meet\n";
- return 1;
- }
- cout << "Min dist for robots:" << mind << endl;
- return 1;
- // loop(i, 1, 3){
- // loop(j, 1, 3){
- // loop(k, 1, 3){
- // float distI1[MAX_N], distI2[MAX_N], distI3[MAX_N];
- //// err
- //
- // dijkstra(I1, distI1, (float)i);
- // dijkstra(I2, distI2, (float)j);
- // dijkstra(I3, distI3, (float)k);
- //
- // loop(p, 0, N){
- // float dist1 = distI1[p];
- // float dist2 = distI2[p];
- // float dist3 = distI3[p];
- // if(dist1 == dist2 or dist1 == dist3 or dist2 == dist3){// если пришли в 1 место в 1 время
- // if(dist1 == dist2 and dist2 == dist3){
- // mind = min(mind, dist1);
- // }else{
- // mind = min(mind, max(max(dist1, dist2), dist3));
- // }
- // }
- // }
- // }
- // }
- // }
- // cout << "Min dist for all robots:" << mind;
- // if (dist1 == INF && dist2 == INF && dist3 == INF) {
- // std::cout << "Meeting of all robots is not possible." << std::endl;
- // } else {
- // int min_dist = std::min({dist1, dist2, dist3});
- // std::cout << "Minimum distance for all robots to meet: " << min_dist << std::endl;
- // if (min_dist == dist1) {
- // std::cout << "Shortest path is from robot starting at location " << I1 << std::endl;
- // } else if (min_dist == dist2) {
- // std::cout << "Shortest path is from robot starting at location " << I2 << std::endl;
- // } else {
- // std::cout << "Shortest path is from robot starting at location " << I3 << std::endl;
- // }
- // }
- return 0;
- }
- //int main() {
- // ios::sync_with_stdio(0);
- // cin.tie(0);
- //#ifdef DEBUG
- //// freopen("output.txt", "w", stdout);
- //#endif
- // solve();
- // return 1;
- //}
- //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement