小朋友崇拜圈
班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
在一个游戏中,需要小朋友坐一个圈,
每个小朋友都有自己最崇拜的小朋友在他的右手边。
求满足条件的圈最大多少人?
小朋友编号为1,2,3,…N
输入第一行,一个整数N(3<N<100000)
接下来一行N个整数,由空格分开。
要求输出一个整数,表示满足条件的最大圈的人数。
例如:
输入:
9
1 2 3 4 5 6 7 8 9
3 4 2 5 3 8 4 6 9
则程序应该输出:
4
代码
#include <iostream> using namespace std; const int N = 1e5 + 2; int arr[N]; int n; int count = 0; int circle[N]; int res = -1; void dfs(int x) { //碰到一个环路 if (arr[x] == circle[0]) { res = max(res,++count); return ; } if (count >= n) { return ; } circle[count++] = arr[x]; dfs(arr[x]); count--; } int main() { cin >> n; for(int i = 1;i <= n;i++) { cin >> arr[i]; } //从每个小朋友出发,看是否能够形成环 for(int i = 1;i <= 9;i++) { count = 0; circle[count++] = i; dfs(arr[i]); } cout << res <<endl; return 0; }
标签:count,arr,int,res,崇拜,蓝桥,小朋友 From: https://www.cnblogs.com/polang19/p/17075080.html