Guest User

Untitled

a guest
Jul 5th, 2016
2,831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define add push_back
  4. #define INF 1000000000
  5. typedef pair<int,int> ii;
  6. int N, M, A, B, W, v, d;
  7. vector<ii> adj[10000];
  8. int dist[10000][2];
  9.  
  10. struct State
  11. {
  12.     int v, p, d;
  13.     State() {}
  14.     State(int a, int b, int _c) { v = a; p = b; d = _c; }
  15.     bool operator>(const State &s) const { return d > s.d; }
  16. };
  17.  
  18. int dijkstra()
  19. {
  20.     for (int i = 0; i < N; i++) dist[i][0] = dist[i][1] = INF;
  21.     priority_queue< State,vector<State>,greater<State> > pq;
  22.     pq.push(State(0,0,0));
  23.     dist[0][0] = 0;
  24.     while (!pq.empty())
  25.     {
  26.         State s = pq.top(); pq.pop();
  27.         if (dist[s.v][s.p] < s.d) continue;
  28.  
  29.         for (auto p : adj[s.v])
  30.         {
  31.             v = p.first; d = p.second;
  32.             if (dist[v][s.p^1] > dist[s.v][s.p] + d)
  33.             {
  34.                 dist[v][s.p^1] = dist[s.v][s.p] + d;
  35.                 pq.push(State(v,s.p^1,dist[v][s.p^1]));
  36.             }
  37.         }
  38.     }
  39.     return dist[N-1][0];
  40. }
  41.  
  42. int main()
  43. {
  44.     ios_base::sync_with_stdio(false);
  45.     scanf("%d %d", &N, &M);
  46.     for (int i = 0; i < M; i++)
  47.     {
  48.         scanf("%d %d %d", &A, &B, &W); A--; B--;
  49.         adj[A].add(ii(B,W));
  50.         adj[B].add(ii(A,W));
  51.     }
  52.     int ret = dijkstra();
  53.     printf("%d\n", ret==INF?-1:ret);
  54. }
Advertisement
Add Comment
Please, Sign In to add comment