tien_noob

White - Black - Gray DFS

Jul 25th, 2021 (edited)
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. //Make CSP great again
  2. #include <bits/stdc++.h>
  3. #define TASK "TESTCODE"
  4. using namespace std;
  5. const int N = 1e5;
  6. int a[N + 1], n, res = 0, b[N + 1];
  7. void read()
  8. {
  9.     cin >> n;
  10.     for (int i = 1; i <= n; ++ i)
  11.     {
  12.         cin >> a[i];
  13.     }
  14. }
  15. bool DFS(int u)
  16. {
  17.     if (b[u] == 1)
  18.     {
  19.         return false;
  20.     }
  21.     if (b[u] == 2)
  22.     {
  23.         return true;
  24.     }
  25.     b[u] = 2;
  26.     return DFS(a[u]);
  27. }
  28. void reDFS(int u)
  29. {
  30.     b[u] = 1;
  31.     if (b[a[u]] == 2)
  32.     {
  33.         reDFS(a[u]);
  34.     }
  35. }
  36. void solve()
  37. {
  38.     for (int i = 1; i <= n; ++ i)
  39.     {
  40.         if (DFS(i))
  41.         {
  42.             ++res;
  43.         }
  44.         reDFS(i);
  45.     }
  46.     cout << res;
  47. }
  48. int main()
  49. {
  50.     ios_base::sync_with_stdio(false);
  51.     cin.tie(nullptr);
  52.     //freopen(TASK".INP", "r", stdin);
  53.     //freopen(TASK".OUT", "w", stdout);
  54.     int t = 1;
  55.     bool typetest = false;
  56.     if (typetest)
  57.     {
  58.         cin >> t;
  59.     }
  60.     for (int __ = 1; __ <= t; ++ __)
  61.     {
  62.         read();
  63.         solve();
  64.     }
  65. }
  66.  
Add Comment
Please, Sign In to add comment