Advertisement
vivek_ragi

No_of_ways_to_arrive_at_destination

Oct 24th, 2022
1,341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int countPaths(int n, vector<vector<int>>& roads) {
  4.         vector<long long> dist(n, LLONG_MAX), ways(n, 0);
  5.         vector<pair<long long,long long>> adj[n];
  6.        
  7.         for (auto y: roads) {
  8.             adj[y[0]].push_back({y[1],y[2]});
  9.             adj[y[1]].push_back({y[0], y[2]});
  10.         }
  11.         long long mod = (long long)(1e9 + 7);
  12.        
  13.         priority_queue<pair<long long,long long>, vector<pair<long long,long long>>, greater<pair<long long,long long>>>pq;
  14.         // src
  15.         dist[0] = 0;
  16.         ways[0] = 1;
  17.         pq.push({dist[0], 0});
  18.        
  19.         while (!pq.empty()) {
  20.             long long u = pq.top().second;
  21.             long long ed = pq.top().first;
  22.             pq.pop();
  23.             if (ed > dist[u]) continue;
  24.            
  25.             for (auto nei: adj[u]) {
  26.                 int v = nei.first;
  27.                 int wei = nei.second;
  28.                
  29.                 if (dist[v] > dist[u] + wei) {
  30.                     dist[v] = dist[u] + wei;
  31.                     ways[v] = ways[u];
  32.                     pq.push({dist[v], v});
  33.                    
  34.                 }
  35.                 else if (dist[v] == dist[u] + wei) {
  36.                     ways[v] = (ways[v] + ways[u]) % (mod);
  37.                 }
  38.                
  39.             }
  40.         }
  41.        
  42.         return ways[n - 1] % mod;
  43.        
  44.        
  45.     }
  46. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement