Advertisement
tepyotin2

The Bovine Shuffle

Jun 13th, 2025
426
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int n;
  6. vector<int> np;
  7. vector<bool> visited;
  8. vector<bool> cycle;
  9. int og;
  10. int ans;
  11.  
  12. void dfs(int node){
  13.     if(visited[node]) return;
  14.     visited[node] = true;
  15.     if(np[node] == og){
  16.         cycle[og] = true;
  17.         int v = np[og];
  18.         while(v!=og){
  19.             cycle[v] = true;
  20.             v = np[v];
  21.         }
  22.         return;
  23.     }
  24.     if(!visited[np[node]]){
  25.         dfs(np[node]);
  26.     }
  27. }
  28.  
  29. int main(){
  30.     //freopen("bshuffle.in", "r", stdin);
  31.    
  32.     cin >> n;
  33.     np.resize(n+1);
  34.     visited.resize(n+1, false);
  35.     cycle.resize(n+1, false);
  36.     for(int i=1; i<=n; i++){
  37.         int v;
  38.         cin >> v;
  39.         np[i] = v;
  40.     }
  41.     for(int i=1; i<=n; i++){
  42.         //visited.clear();
  43.         fill(visited.begin(), visited.end(), false);
  44.         //cout << visited[i] << '\n';
  45.         og = i;
  46.         if(!cycle[i]){
  47.             //cout << "HI" << " || " << i << '\n';
  48.             dfs(i);
  49.         }
  50.         if(cycle[i]){
  51.             //cout << "i: " << i << '\n';
  52.             ans++;
  53.         }
  54.     }
  55.     cout << ans << '\n';
  56.    
  57.     return 0;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement