Guest User

Untitled

a guest
Jan 8th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:256000000")
  2. #include <iostream>
  3. #include <vector>
  4. #include <ctime>
  5. #include <csetjmp>
  6. using namespace std;
  7.  
  8. const int MAXN = 10000000;
  9.  
  10. int n, m;
  11. vector<int> t[MAXN];
  12.  
  13. int dfs(int v) {
  14.     if (v == n - 1) {
  15.         return v;
  16.     } else {
  17.         for (int i = 0; i < (int)t[v].size(); i++) {
  18.             int val = dfs(t[v][i]);
  19.             if (val != -1) {
  20.                 return val;
  21.             }
  22.         }
  23.         return -1;
  24.     }
  25. }
  26.  
  27. void dfs2(int v) {
  28.     if (v == n - 1) {
  29.         throw v;
  30.     } else {
  31.         for (int i = 0; i < (int)t[v].size(); i++) {
  32.             dfs2(t[v][i]);
  33.         }
  34.     }
  35. }
  36.  
  37. jmp_buf env;
  38. int val3;
  39.  
  40. void dfs3(int v) {
  41.     if (v == n - 1) {
  42.         val3 = n - 1;
  43.         longjmp(env, 1);
  44.     } else {
  45.         for (int i = 0; i < (int)t[v].size(); i++) {
  46.             dfs3(t[v][i]);
  47.         }
  48.     }
  49. }
  50.  
  51. int main() {
  52.     cin >> n >> m;
  53.     for (int i = 0; i < n - 1; i++) {
  54.         t[i].push_back(i + 1);
  55.     }
  56.  
  57.     clock_t start = clock();
  58.     int dummy = 0;
  59.     for (int i = 0; i < m; i++) {
  60.         dummy += dfs(0);
  61.     }
  62.     cout << clock() - start << endl;
  63.  
  64.     start = clock();
  65.     for (int i = 0; i < m; i++) {
  66.         try {
  67.             dfs2(0);
  68.         } catch (int val) {
  69.             dummy += val;
  70.         }
  71.     }
  72.     cout << clock() - start << endl;
  73.  
  74.     start = clock();
  75.     for (int i = 0; i < m; i++) {
  76.         if (setjmp(env)) {
  77.             dummy += val3;
  78.         } else {
  79.             dfs3(0);
  80.         }
  81.     }
  82.     cout << clock() - start << endl;
  83.  
  84.     cout << dummy << endl;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment