merkator

Untitled

May 18th, 2012
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. #define FN "test"
  2.  
  3. #include<cstdio>
  4. #include<cctype>
  5. #include<iostream>
  6. #include<fstream>
  7. #include<functional>
  8. #include<utility>
  9. #include<vector>
  10. #include<stack>
  11. #include<map>
  12. #include<queue>
  13. #include<deque>
  14. #include<cstdlib>
  15. #include<cmath>
  16. #include<algorithm>
  17. #include<set>
  18. #include<complex>
  19. #include<cstring>
  20. #include<string>
  21. #include<cassert>
  22. #include<iomanip>
  23.  
  24.                
  25. using namespace std;
  26.  
  27. typedef long long LL;
  28.  
  29. #define pb push_back
  30. #define mp make_pair
  31. #define fi first
  32. #define se second
  33. #define all(n) (n).begin(), (n).end()
  34. #define EPS 1e-9
  35. #define INF 1e9
  36. #define forn(i, n) for(int i = 0; i < (n); ++i)
  37. #define forab(i, a, b) for(int i = a; (i) < (b); ++(i))
  38. #define forba(i, b, a) for(int i = b-1; i >= (a); --i)
  39. #define forit(i, v) for(__typeof((v).begin()) i = (v).begin(); i != (v).end(); ++i)
  40.  
  41. int main(){
  42. #ifdef FN
  43.     freopen(FN".in", "r", stdin);
  44.     freopen(FN".out", "w", stdout);
  45. #endif
  46.     int n, m;
  47.     scanf("%d%d", &n, &m);
  48.     vector < vector < pair<int,int> > > g (n);
  49.  
  50.     forn(i, m){
  51.         int a, b, c;
  52.         scanf("%d%d%d", &a, &b, &c);
  53.         g[a-1].pb(mp(b-1, c));
  54.     }
  55.  
  56.     int s = 0;
  57.     vector<int> d (n, INF),  p (n, 0);
  58.     d[s] = 0;
  59.     p[s] = 0;
  60.     vector<char> u (n);
  61.     for (int i=0; i<n; ++i) {
  62.         int v = -1;
  63.         for (int j=0; j<n; ++j)
  64.             if (!u[j] && (v == -1 || d[j] < d[v]))
  65.                 v = j;
  66.         if (d[v] == INF)
  67.             break;
  68.         u[v] = 1;
  69.  
  70.         for (size_t j=0; j<g[v].size(); ++j) {
  71.             int to = g[v][j].first,
  72.                 len = g[v][j].second;
  73.             if (d[v] + len < d[to]) {
  74.                 d[to] = d[v] + len;
  75.                 p[to] = v;
  76.             }
  77.         }
  78.         forn(i, n){
  79.             printf("%d ", i);
  80.         }
  81.         puts("");
  82.         forn(i, n){
  83.             printf("%d ", d[i]);
  84.         }
  85.         puts("");
  86.         forn(i, n){
  87.             printf("%d ", p[i]);
  88.         }
  89.         puts("");
  90.         puts("");
  91.     }
  92.     forn(i, n+1){
  93.         printf("%d ", i);
  94.     }
  95.     puts("");
  96.     forn(i, n+1){
  97.         if(i==0){
  98.             printf("d ");
  99.         } else
  100.         printf("%d ", d[i-1]);
  101.     }
  102.     puts("");
  103.     forn(i, n+1){
  104.         if(i==0){
  105.             printf("p ");
  106.         } else
  107.         printf("%d ", p[i-1]);
  108.     }
  109.     puts("");
  110. }
Advertisement
Add Comment
Please, Sign In to add comment