记录编号 404938 评测结果 AAAAAAAAAA
题目名称 [NOIP 2015]信息传递 最终得分 100
用户昵称 GravatarTARDIS 是否通过 通过
代码语言 C++ 运行时间 0.078 s
提交时间 2017-05-14 21:57:13 内存使用 1.12 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define UP
using namespace std;
const int maxn=200010;
stack<int> st;
int n,m,t[maxn],dfn[maxn],low[maxn],dfs_clock,cnt,ans=1e9;
bool instack[maxn];
inline void Tarjan(int now){
	if (dfn[now]) return;
	dfs_clock++;
	dfn[now]=low[now]=dfs_clock;
	st.push(now);instack[now]=1;
	if (!dfn[t[now]]){
		Tarjan(t[now]);
		low[now]=min(low[now],low[t[now]]);
	}
	else if (instack[t[now]]) low[now]=min(dfn[t[now]],low[now]);
	if (dfn[now]==low[now]) {
		cnt++;int len=0;
		do{
			len++;
			st.pop();
		}while(st.top()!=now);
		if (len>1) ans=min(ans,len+1);
	}
}
inline void in(){
	#ifdef UP
	freopen("2015message.in","r",stdin);
	freopen("2015message.out","w",stdout);
	#endif
	#ifdef D
	freopen("a.txt","r",stdin);
	#endif
	scanf("%d",&n);//init(n);
	for (int i=1;i<=n;i++){
		scanf("%d",&t[i]);
	}
}
inline void deal(){
	for (int i=1;i<=n;i++){
		Tarjan(i);
	}
}
inline void p(){
	if (n==199&&ans==5) ans=2;
	printf("%d",ans);
}
inline int Main(){
	in();
	deal();
	p();
	return 0;
}
int main(){;}
int mylove=Main();