题意:
给出第I点到第p i点是最远的,询问有多少个区域。
思路
简单并查集一遍成!
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
#define maxn 100005
int father[maxn];
int find(int x)
{
if(father[x]!=x)
father[x]=find(father[x]);
return father[x];
}
void Union(int x,int y)
{
int root1=find(x);
int root2=find(y);
if(root1!=root2)
{
father[root1]=root2;
}
return ;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
father[i]=i;
}
for(int i=1;i<=n;i++)
{
int t;
cin>>t;
Union(t,i);
}
int ans=0;
for(int i=1;i<=n;i++)
{
if(father[i]==i)
{
ans++;
}
}
cout<<ans<<endl;
}