#include<bits/stdc++.h> using namespace std; long long t,n,x1,x2,s,j; long long a[1000001]; long long b[1000001],c[1000001]; void dfs(int i) { s++; if(a[i]==j) { c[i]=s; return; } else { dfs(a[i]); c[i]=s; } } int main() { cin>>t; while(t--) { cin>>n; s=0; for(int i=1;i<=n;i++) { cin>>a[i]; b[i]=i; c[i]=0; } for(int i=1;i<=n;i++) { if(c[i]==0) { j=i; s=0; dfs(i); } } for(int i=1;i<=n;i++) cout<<c[i]<<" "; cout<<endl; } }
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int q; cin>>q; for(int g=0;g<q;g++) { int n,a[10001],sum=1; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } int c,b=101; for(int i=1;i<=n;i++) { sum=1; c=i; while(a[c]!=i) { c=a[c]; sum++; } printf("%d ",sum); } printf("\n"); } }
B2. Books Exchange 俩种不同速度的解法