Insyder01

Untitled

May 6th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define L(i, m, n) for(int i(m);i < n;i++)
  3. #define pb push_back
  4. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  5. #define in(x) cin >> x
  6. #define SZ(X) int(X.size())
  7. #define clr(A, V) L(i, 0, 111) A[i]=V
  8. #define inf 999999
  9. #define ff first
  10. #define ss second
  11. #define RF(X) freopen(X, "r", stdin)
  12. #define WF(X) freopen(X, "w", stdout)
  13. using namespace std;
  14. typedef long long ll;
  15. typedef pair<ll,ll> pll;
  16. typedef vector<int> vi;
  17. typedef vector<vi> vii;
  18. typedef pair<int,int> pii;
  19. typedef vector<pii> vpii;
  20. typedef pair<int, string> pis;
  21. typedef vector<string> vs;
  22. typedef pair<pair<int, int>, pair<int, int > > piiii;
  23.  
  24. const int INF=1e9;
  25. vi dist(10009, INF); /**Don't forget to check nodes number and memset each test**/
  26. void Dijkstra(int &V, vector <vpii> &AdjList, int &s){
  27.     dist[s] = 0; /** INF = 1B to avoid overflow**/
  28.     priority_queue< pii, vector<pii>, greater<pii> > pq; /**parameters**/
  29.     pq.push(pii(0, s));
  30.     while (!pq.empty()){
  31.         pii front = pq.top(); pq.pop(); int d=front.ff,u=front.ss;
  32.         if (d > dist[u]) continue; /** Lazy Deletion **/
  33.         L(j,0,SZ(AdjList[u])){
  34.             pii v = AdjList[u][j];/**first vertex number, weight second**/
  35.             if (dist[u]+v.ss < dist[v.ff]){
  36.                 dist[v.ff] = dist[u] + v.ss; /** relax operation**/
  37.                 pq.push(pii(dist[v.ff], v.ff));
  38.             }
  39.         }
  40.     } /** this variant can cause duplicate items in the priority queue**/
  41. }
Add Comment
Please, Sign In to add comment