10分求助
查看原帖
10分求助
137723
pencil楼主2020/10/23 22:21
#include<bits/stdc++.h>
using namespace std;
long int f[200010],n,i,l[200010],af,bf,a,minn=0x3f;//[41],n,i,i2,w,h,l;
int find(int x){
	int xx;
	if(f[x]!=x){
		xx=f[x];
		f[x]=find(f[x]);
		l[x]+=l[xx];
	}
	return f[x];
}
int main() {
	cin>>n;
	for(i=1;i<=n;i++)   f[i]=i;
	for(i=1;i<=n;i++){
		cin>>a;
		af=find(a);bf=find(i);
		if(af!=bf){
			f[af]=bf;
			l[af]=l[bf]+1;
		}
		else{
			minn=min(minn,l[a]+l[i]+1);
		}
	}
	cout<<minn;
	return 0;
}
2020/10/23 22:21
加载中...