#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int parent[1000005];
bool hash[1000005];
int getpar(int a)
{
if (parent[a]!=a)
parent[a]=getpar(parent[a]);
return parent[a];
}
int main()
{
int T;
while (scanf("%d",&T)!=EOF)
{
int ans=0;
memset(hash,false,sizeof(hash));
memset(parent,0,sizeof(parent));
int i;
for (i=1;i<=T;i++) parent[i]=i;
for (i=1;i<=T;i++)
{
int n;
scanf("%d",&n);
if (parent[getpar(i)]!=getpar(n))
parent[parent[i]]=parent[n];
}
for (i=1;i<=T;i++)
{
if (!hash[parent[getpar(i)]])
{
ans++;
hash[parent[i]]=true;
}
}
printf("%d\n",ans);
}
return 0;
}
Sicily1350(并查集)
最新推荐文章于 2019-06-26 23:27:00 发布