题目描述
班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
在一个游戏中,需要小朋友坐一个圈,
每个小朋友都有自己最崇拜的小朋友在他的右手边。
求满足条件的圈最大多少人?
小朋友编号为1,2,3,…N
输入
输入第一行,一个整数N(3<N<100000)
接下来一行N个整数,由空格分开。
输出
要求输出一个整数,表示满足条件的最大圈的人数。
样例输入
9
3 4 2 5 3 8 4 6 9
样例输出
4
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100001;
int N;
int dep[maxn], a[maxn];
int dfs(int now){
int next = a[now];
if(dep[next] != 0) return dep[now] - dep[next] + 1;
else{
dep[next] = dep[now] + 1;
int ans = dfs(next);
dep[next] = 0; //回溯
return ans;
}
}
int main()
{
cin>>N;
for(int i=1;i<=N;i++){
cin>>a[i];
}
int ans = -1;
for(int i=1;i<=N;i++){
dep[i] = 1;
int cnt = dfs(i);
dep[i] = 0; //回溯
ans = max(cnt,ans);
}
cout<<ans;
return 0;
}