Advertisement
i_love_rao_khushboo

Useful Extra Edges

Jul 10th, 2021
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. // Prob: https://www.interviewbit.com/problems/useful-extra-edges/
  2.  
  3. #define pii pair<int, int>
  4. #define pb push_back
  5. #define F first
  6. #define S second
  7.  
  8. int dijkstras(int n, int src, int dst, vector<vector<pii>> &g) {
  9.     vector<int> d(n + 1, INT_MAX);
  10.     priority_queue<pii, vector<pii>, greater<pii>> q;
  11.     vector<bool> vis(n + 1, false);
  12.    
  13.     d[src] = 0;
  14.     q.push({0, src});
  15.    
  16.     while(!q.empty()) {
  17.         int mn = q.top().F;
  18.         int v = q.top().S;
  19.         q.pop();
  20.        
  21.         if(vis[v]) continue;
  22.         vis[v] = true;
  23.        
  24.         for(auto child: g[v]) {
  25.             if(d[child.F] > mn + child.S) {
  26.                 d[child.F] = mn + child.S;
  27.                 q.push({d[child.F], child.F});
  28.             }
  29.         }
  30.     }
  31.    
  32.     return d[dst];
  33. }
  34.  
  35. int Solution::solve(int A, vector<vector<int> > &B, int C, int D, vector<vector<int> > &E) {
  36.     vector<vector<pii>> g(A + 1);
  37.     for(int i = 0; i < B.size(); i++) {
  38.         g[B[i][0]].pb({B[i][1], B[i][2]});
  39.     }
  40.        
  41.     int res = INT_MAX;
  42.        
  43.     for(auto x: E) {
  44.         if(x[0] > A or x[1] > A) continue;
  45.         g[x[0]].pb({x[1], x[2]});
  46.         g[x[1]].pb({x[0], x[2]});
  47.            
  48.         int tmp = dijkstras(A, C, D, g);
  49.         res = min(res, tmp);
  50.            
  51.         g[x[0]].pop_back();
  52.         g[x[1]].pop_back();
  53.     }
  54.        
  55.     if(res == INT_MAX) res = -1;
  56.     return res;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement