题目描述
解题思路
需要注意的就是能满足题目条件的圈中,最后一个小朋友崇拜的一定是这个圈中的第一个小朋友,弄懂了这一点,其他部分和基本的深搜区别不大
C++代码
#include<bits/stdc++.h>
using namespace std;
long long resp[100010];//存第i个小朋友崇拜的人
long long m_count[100010];//每个人被崇拜次数
long long vis[100010];//标记选过的人
long long n,ans = 0,cnt = 0;
void dfs(long long i,long long ori){
//ori代表的是第一个人
if(i != ori && vis[i]){
return;
}
if(i == ori && vis[i]){
//如果想围成一个圈,最后一个人崇拜的一定是第一个人
ans = max(ans,cnt);
return;
}
cnt++;
vis[i] = true;
dfs(resp[i],ori);
vis[i] = false;
cnt--;
}
int main()
{
cin>>n;
for(int i = 1; i <= n; i++){
cin>>resp[i];
}
memset(vis, 0, sizeof(vis));
for(int i = 1; i <=n; i++){
dfs(i,i);
}
cout<<ans<<endl;
return 0;
}