Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int n;
- vector<int> np;
- vector<bool> visited;
- vector<bool> cycle;
- int og;
- int ans;
- void dfs(int node){
- if(visited[node]) return;
- visited[node] = true;
- if(np[node] == og){
- cycle[og] = true;
- int v = np[og];
- while(v!=og){
- cycle[v] = true;
- v = np[v];
- }
- return;
- }
- if(!visited[np[node]]){
- dfs(np[node]);
- }
- }
- int main(){
- //freopen("bshuffle.in", "r", stdin);
- cin >> n;
- np.resize(n+1);
- visited.resize(n+1, false);
- cycle.resize(n+1, false);
- for(int i=1; i<=n; i++){
- int v;
- cin >> v;
- np[i] = v;
- }
- for(int i=1; i<=n; i++){
- //visited.clear();
- fill(visited.begin(), visited.end(), false);
- //cout << visited[i] << '\n';
- og = i;
- if(!cycle[i]){
- //cout << "HI" << " || " << i << '\n';
- dfs(i);
- }
- if(cycle[i]){
- //cout << "i: " << i << '\n';
- ans++;
- }
- }
- cout << ans << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement