Advertisement
Guest User

Untitled

a guest
Jul 16th, 2012
1,082
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <set>
  5. #include <stdio.h>
  6.  
  7. using namespace std;
  8.  
  9. const int MX = 100100;
  10. const long long INF = 1000000000L;
  11.  
  12. long long n, m, dist[MX], prev[MX];
  13.  
  14. int main(void) {
  15.     cin >> n >> m;
  16.     vector<pair<long long, long long> > p[n + 1];
  17.     for(int i = 1; i <= n; i++) { dist[i] = INF; prev[i] = -1; }
  18.     for(int i = 0; i < m; i++) {
  19.         long long a, b, c; cin >> a >> b >> c;
  20.         p[a].push_back(make_pair(b, c));
  21.         p[b].push_back(make_pair(a, c));
  22.     }
  23.     dist[1] = 0;
  24.     set<pair<long long, long long> > pq;
  25.     pq.insert(make_pair(dist[1], 1));
  26.  
  27.     while(!pq.empty()) {
  28.         pair<long long, int> tmp = (*pq.begin()); pq.erase(pq.begin());
  29.         for(long long i = 0; i < p[tmp.second].size(); i++) {
  30.             long long &ac_cost = dist[p[tmp.second][i].first];
  31.             long long no_cost = tmp.first + p[tmp.second][i].second;
  32.             if(no_cost < ac_cost) {
  33.                 ac_cost = no_cost;
  34.                 prev[p[tmp.second][i].first] = tmp.second;
  35.                 pq.insert(make_pair(dist[p[tmp.second][i].first], p[tmp.second][i].first));
  36.             }
  37.         }
  38.     }
  39.     if(dist[n] == INF) {
  40.         cout << "-1" << endl;
  41.     } else {
  42.         vector<long long> ans;
  43.         long long end = n;
  44.         ans.push_back(end);
  45.         while(prev[end] != -1) {
  46.             ans.push_back(prev[end]);
  47.             end = prev[end];
  48.         }
  49.         reverse(ans.begin(), ans.end());
  50.         for(int i = 0; i < ans.size(); i++) {
  51.             if(i == ans.size() - 1) {
  52.                 cout << ans[i] << endl;
  53.             } else {
  54.                 cout << ans[i] << " ";
  55.             }
  56.         }
  57.     }
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement