Nik_Perepelov

4 контест 3 задача

Oct 5th, 2021
872
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<vector>
  3. #include<algorithm>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. vector<vector<pair<int, double>>> G;
  9. vector<int> used;
  10. vector<double> variability;
  11. int n;
  12.  
  13. void dkstr(int v) {
  14.     variability[v] = 1;
  15.     for (int i = 0; i < n; i++) {
  16.         //поиск минимума
  17.         int max_v = -1;
  18.         double max_ver = -1;
  19.         for (int i = 0; i < n; i++) {
  20.             if (used[i] == 0 && variability[i] > max_ver) {
  21.                 max_v = i;
  22.                 max_ver = variability[i];
  23.             }
  24.         }
  25.         if (max_v == -1) {
  26.             return;
  27.         }
  28.         //релаксация
  29.         used[max_v] = 1;
  30.         for (int i = 0; i < G[max_v].size(); i++) {
  31.             int actual_v = G[max_v][i].first;
  32.             double weight = G[max_v][i].second;
  33.             if (used[actual_v] == 0 && variability[actual_v] < max_ver * weight) {
  34.                 variability[actual_v] = max_ver * weight;
  35.             }
  36.         }
  37.     }
  38. }
  39.  
  40. int main() {
  41.     int m;
  42.     cin >> n >> m;
  43.     int s, f;
  44.     cin >> s >> f;
  45.     s -= 1;
  46.     f -= 1;
  47.  
  48.     G = vector<vector<pair<int, double>>>(n);
  49.     used = vector<int>(n);
  50.     variability = vector<double>(n, -1);
  51.  
  52.     //ввод данных
  53.     for (int i = 0; i < m; i++) {
  54.         int fr, to, ver;
  55.         cin >> fr >> to >> ver;
  56.         fr--;
  57.         to--;
  58.         G[fr].push_back(make_pair(to, 1 - double(ver) / 100));
  59.         G[to].push_back(make_pair(fr, 1 - double(ver) / 100));
  60.     }
  61.  
  62.     dkstr(s);
  63.    
  64.     if (used[f] == 0) {
  65.         cout << -1;
  66.     } else {
  67.         cout << fixed << 1 - variability[f] << '\n';
  68.     }
  69.     return 0;
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment