有人并查集没路径压缩,按秩合并,n^2过了
#include<bits/stdc++.h>
#define int long long
#define double long double
#define INF INT_MAX
using namespace std;
const int maxn=2e5+5;
int n,ans=INF,sum;
int t[maxn],f[maxn];
int find(int x){
sum++;
if(f[x]==x) return x;
else return find(f[x]);
}
signed main() {
freopen("message.in","r",stdin);
freopen("message.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n;
for(int i=1;i<=n;i++) f[i]=i;
for(int i=1;i<=n;i++) cin>>t[i];
for(int i=1;i<=n;i++){
sum=0;
int A=find(t[i]);
if(A==i) ans=min(ans,sum);
else f[i]=t[i];
// for(int i=1;i<=n;i++) cout<<f[i]<<" ";
// cout<<endl;
}
cout<<ans<<endl;
return 0;
}
/*
5
2 4 2 3 1
*/