题解
2025-07-09 20:01:58
发布于:江苏
6阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int ans_min=9999999;
int n,a[200005];
int dis[200005];
int find(int x){
if(a[x]!=x){
int last=a[x];
a[x]=find(a[x]);
dis[x]+=dis[last];
}
return a[x];
}
void merge(int x,int y){
int xx=find(x);
int yy=find(y);
if(xx!=yy){
a[xx]=yy;
dis[x]=dis[y]+1;
}
else ans_min=min(ans_min,dis[x]+dis[y]+1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) a[i]=i;
for(int i=1;i<=n;i++){
int t;
cin>>t;
merge(i,t);
}
cout<<ans_min;
return 0;
}
这里空空如也
有帮助,赞一个