题目描述
并查集找环
#include<iostream>
using namespace std;
const int N=1010;
int n,si[N],p[N],f[N];
int find(int x)
{
if(p[x]!=x)p[x]=find(p[x]);
return p[x];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)p[i]=i,si[i]=1;
for(int i=1;i<=n;i++)
{
cin>>f[i];
if(f[i]==0)continue;
int a=find(i),b=find(f[i]);
if(a!=b)
{
si[b]+=si[a];
p[a]=b;
}
}
int res=0;
for(int i=1;i<=n;i++)
{
if(p[i]==i&&f[i]==0)res+=si[i];
}
cout<<res;