#include <bits/stdc++.h>
using namespace std;
int n;
void dfs(vector<int> a,vector<bool> &m,int i){
if(m[a[i]]){return;}
m[a[i]]=true;
dfs(a,m,a[i]);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
vector<int> a(n);
vector<bool> m(n,false);
int ans=0;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
if(m[i]==false){
ans++;
m[i]=true;
dfs(a,m,i);
}
}
cout<<ans;
}
#include
using namespace std;
int n;
void dfs(vector a,vector &m,int i){
if(m[a[i]]){return;}
m[a[i]]=true;
dfs(a,m,a[i]);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
vector a(n);
vector m(n,false);
int ans=0;
for(int i=0;i>a[i];
}
for(int i=0;i
改成這樣就AC了,但不知道為什麼會有出界情形
void dfs(vector<int> &a, vector<bool> &m, int i) {
if (m[i]) { return; }
m[i] = true;
if (i < a.size()) { dfs(a, m, a[i]); } //這一行
}