urmisaha

Dijkstra: Minimum Penalty Path Hackerrank

Oct 18th, 2019
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define maxm 1001
  3. #define ll long long
  4. #define pii pair<ll, ll>
  5.  
  6. using namespace std;
  7. ll n, m, u, v, c, a, b;
  8. vector<pair<ll, ll> > g[maxm];
  9. priority_queue<pii, vector<pii>, greater<pii> > pq;
  10.  
  11. ll beautifulPath() {
  12.     vector<ll> dist(maxm, INT_MAX);
  13.     vector<ll> vis(maxm, 0);
  14.     dist[a] = 0;
  15.     pq.push(make_pair(dist[a], a));
  16.     while(!pq.empty()){
  17.         ll x = pq.top().second;
  18.         pq.pop();
  19.         for(ll i=0; i<g[x].size(); ++i){
  20.             ll y = g[x][i].second;
  21.             ll d = g[x][i].first;
  22.             if((d | dist[x]) < dist[y]){
  23.                 dist[y] = (d | dist[x]);
  24.                 pq.push(make_pair(dist[y], y));
  25.             }
  26.         }
  27.     }
  28.     if(dist[b] == INT_MAX)
  29.         return -1;
  30.     return dist[b];
  31. }
  32.  
  33. int main()
  34. {
  35.     cin>>n>>m;
  36.     for(ll i=0; i<m; ++i){
  37.         cin>>u>>v>>c;
  38.         g[u].push_back(make_pair(c, v));
  39.         g[v].push_back(make_pair(c, u));
  40.     }
  41.     cin>>a>>b;
  42.     cout<<beautifulPath();
  43.     return 0;
  44. }
Add Comment
Please, Sign In to add comment