|
|
题目描述涵涵有N个朋友,编号从1到N。有一天,涵涵不小心让朋友X知道了他的秘密。当朋友i得知秘密后,他会将秘密分享给朋友A_i(如果A_i还不知道这个秘密)。请问最终有多少个朋友会知道这个秘密?输入格式:输入通过标准输入提供,格式如下:第一行包含两个整数N和X第二行包含N个整数A_1, A_2, ..., A_N输出格式:输出一个整数,表示最终知道秘密的朋友数量。样例输入与输出:样例输入1:4 23 1 1 2样例输出1:3解释:秘密从朋友2开始传播。朋友2分享给朋友1(因为A_2=1),朋友1分享给朋友3(因为A_1=3),朋友3分享给朋友1,但朋友1已知秘密,传播停止。最终朋友1、2、3知道秘密,故输出3。样例输入2:20 127 11 10 1 7 20 14 2 17 3 2 5 19 20 8 14 18 2 10 10样例输出2:7数据范围:2 ≤ N ≤ 10^51 ≤ X ≤ N1 ≤ A_i ≤ NA_i ≠ i输入中的所有值均为整数。
答案
#include<bits/stdc++.h>
using namespace std;
int a[100005];
bool dp[100005]={false};
int main(){
int n,x,ans=0;
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a;
}
while(1){
if(dp[x]==false){
dp[x]=true;
x=a[x];
ans++;
}
else break;
}
cout<<ans;
return 0;
}
|
|