找回密码
 立即注册
搜索
热搜: 代码
查看: 53|回复: 0

秘密

[复制链接]

6

主题

10

回帖

747

积分

管理员

积分
747
发表于 2025-10-18 15:44:41 | 显示全部楼层 |阅读模式
题目描述涵涵有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;
}




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|编程

GMT+8, 2025-10-29 19:03 , Processed in 0.061660 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表