#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]); } //這一行
}