Advertisement
Guest User

NetworkDelayTime

a guest
Oct 19th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int maxDist(vector<int> d) {
  4.         int m = d[1];
  5.         for (int i = 1; i < d.size(); i++) {
  6.             cout << d[i] << " ";
  7.             if (d[i] > m) {
  8.                 m = d[i];
  9.             }
  10.             if (d[i] == INT_MAX) {
  11.                 return -1;
  12.             }
  13.         }
  14.         return m;
  15.     }
  16.    
  17.     void signalTravel(map <int, vector<pair<int, int>>> nd, vector<int> &d, int K, int dist) {
  18.         map <int, vector<pair<int,int>>> :: iterator it;
  19.        
  20.         it = nd.find(K);
  21.        
  22.         if (it == nd.end()) {
  23.             return;
  24.         }
  25.         vector<pair<int, int>> temp = it -> second;
  26.         for (int i = 0; i < temp.size(); i++) {
  27.             dist += temp[i].second;
  28.             if (d[temp[i].first] == INT_MAX || d[temp[i].first] > dist) {
  29.                 d[temp[i].first] = dist;
  30.                 signalTravel(nd, d, temp[i].first, dist);
  31.             }
  32.             dist -= temp[i].second;
  33.         }        
  34.         return;
  35.     }
  36.    
  37.     int networkDelayTime(vector<vector<int>> times, int N, int K) {
  38.         map <int, vector<pair<int, int>>> nd;
  39.        
  40.         //yeah, this map looks like monster
  41.         map <int, vector<pair<int, int>>> :: iterator it;
  42.        
  43.         //converting containers
  44.         for (int i = 0; i < times.size(); i++) {
  45.             it = nd.find(times[i][0]);
  46.             if (it == nd.end()) {
  47.                 vector <pair<int,int>> vnl;
  48.                 vnl.push_back(make_pair(times[i][1], times[i][2]));
  49.                 nd.insert(make_pair(times[i][0], vnl));
  50.             } else {
  51.                 vector <pair<int,int>> vnl;
  52.                 vnl = it -> second;
  53.                 vnl.push_back(make_pair(times[i][1], times[i][2]));
  54.                 it -> second = vnl;
  55.             }
  56.         }
  57.        
  58.         vector <int> d(N + 1, INT_MAX);
  59.         d[K] = 0;
  60.         signalTravel(nd, d, K, 0);
  61.         return maxDist(d);
  62.     }
  63. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement