70分求助
查看原帖
70分求助
740093
SamHe楼主2024/7/18 16:39
#include<bits/stdc++.h>
using namespace std;
int n;
int edge[200010];
int flag[200010];
int cnt[200010];
int ans=200010;
void dfs(int x,int tot){
	if(flag[edge[x]]==1){
		ans=min(ans,tot);
		return;
	}
	flag[x]=1;
	dfs(edge[x],tot+1);
	flag[x]=0;
	return;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		edge[i]=x;
		cnt[x]=1;
	}
	for(int i=1;i<=n;i++){
		if(cnt[i]){
			dfs(i,1);
		}
	}
	printf("%d",ans);
	return 0;
}

2024/7/18 16:39
加载中...