记录编号 540401 评测结果 AAAAAAAAAA
题目名称 2105.[NOIP 2015]信息传递 最终得分 100
用户昵称 ShallowDream雨梨 是否通过 通过
代码语言 C++ 运行时间 0.047 s
提交时间 2019-08-23 09:19:15 内存使用 6.38 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=200005;
int ru[maxn],vis[maxn],q[maxn];
int n;
inline int read(){
	int f=1,x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;ch=getchar();}
		while(ch>='0'&&ch<='9'){
			x=(ch^48)+(x<<3)+(x<<1);
			ch=getchar();}
			return x*f;
}
		
void del(int x){
	vis[x]=1;
	ru[q[x]]--;
	if(ru[q[x]]==0)del(q[x]);}
 
int dfs(int x,int start,int l)	{
	if(x==start&&l!=0) return l;

	if(vis[q[x]]==0){
		vis[q[x]]=1;
	dfs(q[x],start,l+1);
}}
int Main(){
		freopen("2015message.in","r",stdin);
		freopen("2015message.out","w",stdout);
	int ans=maxn;
	n=read();
  for(int i=1;i<=n;i++){
		q[i]=read();ru[q[i]]++;}
	for(int i=1;i<=n;i++){
		if(ru[i]==0&&vis[i]==0)del(i);}
	for(int i=1;i<=n;i++){
		if(vis[i]==0)ans=min(ans,dfs(i,i,0));
}
		cout<<ans;
	return 0;
}
int x=Main();
int main(){;}