minimario

<Dijkstra> TEMPLATE

Sep 11th, 2015
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef pair<int, int> pii;
  6. typedef vector<int> vi;
  7.  
  8. #define pb push_back
  9. #define mp make_pair
  10.  
  11. #define f first
  12. #define s second
  13.  
  14. #define FOR(i, a, b) for (int i=a; i<b; i++)
  15. #define F0R(i, a) FOR(i, 0, a)
  16.  
  17. const int MAX = 100005;
  18. const int MOD = 1000000007;
  19. const int MAGIC = 3;
  20.  
  21. vi g[MAX];
  22. int e1[MAX], e2[MAX], w[MAX];
  23. int d[MAX];
  24. int main() {
  25.     F0R(i, MAX) { d[i] = MOD; }
  26.     int n, m; scanf("%d %d", &n, &m);
  27.     F0R(i, m) {
  28.         int u, v, wt; scanf("%d %d %d", &u, &v, &wt);
  29.         e1[i] = u; e2[i] = v; w[i] = wt;
  30.         g[u].pb(i); g[v].pb(i);
  31.     }
  32.     d[s] = 0;
  33.     priority_queue<pii, vector<pii>, greater<pii> > pq;
  34.     pq.push({0, s});
  35.     while (!pq.empty()) {
  36.         pii tp = pq.top(); pq.pop();
  37.         int dist = tp.f; int u = tp.s;
  38.         if (dist > d[u]) { continue; }
  39.         for (int i : g[u]) {
  40.             int v = e1[i] + e2[i] - u;
  41.             int dv = dist + w[i];
  42.             if (dv < d[v]) { d[v] = dv; pq.push({d[v], v}); }
  43.         }
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment