就每个数都组成了一个环,找到这个环,并且赋上这个环的大小
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int i,j,k,n,m,l,a[N],b[N],ans;
void fnd(int x,int st)
{
if(st!=a[x])
{
ans++;
fnd(a[x],st);
}
b[x]=ans;
}
int main()
{
cin>>l;
while(l--)
{
memset(b,0,sizeof b);
cin>>n;
for(i=1; i<=n; i++)
scanf("%d",&a[i]);
for(i=1; i<=n; i++)
if(!b[i])
{
ans=1;
fnd(i,i);
}
for(i=1; i<=n; i++)
if(i==1)
printf("%d",b[i]);
else
printf(" %d",b[i]);
cout<<endl;
}
}