Guest User

Untitled

a guest
Oct 6th, 2014
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #include <ctime>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <vector>
  5. #include <utility>
  6. #include <queue>
  7. #include <algorithm>
  8.  
  9. using namespace std;
  10.  
  11. // TEMPLATE {{{
  12. #ifndef LOCAL
  13. #define OJ 1
  14. #else
  15. #define OJ 0
  16. #endif
  17.  
  18. #define endl '\n'
  19. #define TIMESTAMP merr << "Execution time: " << fixed << setprecision(3) << (double)clock()/CLOCKS_PER_SEC << " s.\n"
  20. class C_ {}; template <typename T> C_& operator <<(C_& __m, const T& __s) { if (!OJ) cerr << "\E[91m" << __s << "\E[0m"; return __m; }
  21. C_ merr;
  22.  
  23. struct __s { __s() { if (OJ) { ios_base::Init i; cin.sync_with_stdio(0); cin.tie(0); } } ~__s(){ TIMESTAMP; } } __S;
  24. /// END OF TEMPLATE }}}
  25.  
  26. vector<pair<int,long long> > G[111111];
  27. long long D[111111];
  28. int n,m,source,dest;
  29.  
  30. void input() {
  31.   cin >> n >> m >> source >> dest;
  32.   for (int i = 0; i < m; i++) {
  33.     int u,v,w;
  34.     cin >> u >> v >> w;
  35.     G[u].push_back(make_pair(v,w));
  36.     G[v].push_back(make_pair(u,w));
  37.   }
  38. }
  39.  
  40. void gen()
  41. {
  42.   int M = 30;
  43.   int W = (int)8e8;
  44.   source = 90;
  45.   dest = 1;
  46.   for (int i = 0; i < M; i++)
  47.     G[i].push_back(make_pair(i + 1, 0));
  48.   G[0].push_back(make_pair(M, W));
  49.   n = M;
  50.  
  51.   for (int i = 0; i < M; i++)
  52.   {
  53.     G[n].push_back(make_pair(n + 2, W >> i));
  54.     G[n].push_back(make_pair(n + 1, 0));
  55.     G[n + 1].push_back(make_pair(n + 2, 0));
  56.     n += 2;
  57.   }
  58.   n++;
  59.   for (int i = 0; i < n; i++)
  60.     random_shuffle(G[i].begin(), G[i].end());
  61. }
  62.  
  63. void gen1() {
  64.   n = 60;
  65.   m = 0;
  66.   source = n-1;
  67.   dest = 1;
  68.   for (int i = 0; i < n; i++) {
  69.     for (int j = i+1; j < n; j++) {
  70.       long long w = j-i;
  71.       for (int k = i+1; k <= j; k++) {
  72.         w += (1LL<<k);
  73.       }
  74.       G[i].push_back(make_pair(j,w));
  75.       G[j].push_back(make_pair(i,w));
  76.       m++;
  77.     }
  78.   }
  79. }
  80.  
  81. int main(void) {
  82.   queue<int> Q;
  83.   long long ans;
  84.   long long idx = 0;
  85.   for (int i = 0; i < 111111; i++) { D[i] = 1000000000000000000LL; }
  86.   //input();
  87.   gen();
  88.   //merr << "m = " << m << '\n';
  89.   D[source] = 0;
  90.   Q.push(source);
  91.   while (Q.size()) {
  92.     idx++;
  93.     int v = Q.front();
  94.     Q.pop();
  95.     for (int i = 0; i < (int)G[v].size(); i++) {
  96.       int vv = G[v][i].first;
  97.       long long ww = G[v][i].second;
  98.       if (D[vv] > D[v]+ww) {
  99.         D[vv] = D[v]+ww;
  100.         Q.push(vv);
  101.       }
  102.     }
  103.   }
  104.   ans = D[dest];
  105.   if (ans >= 1000000000000000000LL) ans = -1;
  106.   cout << ans << endl;
  107.   merr << "idx = " << idx << '\n';
  108.   return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment