atcoder#ABC228B. [ABC228B] Takahashi's Secret

[ABC228B] Takahashi's Secret

题目描述

高橋君には N N 人の友達がいます。N N 人の友達はそれぞれ、友達 1 1 、友達 2 2 \ldots 、友達 N N というあだ名で呼ばれています。

ある日、高橋君はある恥ずかしい秘密を、友達の一人である友達 X X に知られてしまいました。
i = 1, 2, , N i\ =\ 1,\ 2,\ \ldots,\ N について、友達 i i が高橋君の秘密を知ったとき、友達 Ai A_i がまだ高橋君の秘密を知らなければ、友達 i i は高橋君の秘密を友達 Ai A_i にも教えてしまいます。

高橋君の秘密は最終的に何人の友達に知られることになるでしょうか?

输入格式

入力は以下の形式で標準入力から与えられる。

N N X X A1 A_1 A2 A_2 \cdots AN A_N

输出格式

答えを出力せよ。

题目大意

高桥有 nn 个朋友,第 ii 个朋友的编号为 ii 。有一个长为 nn 的数列 a1,a2,...,ana_1,a_2,...,a_n ,表示如果朋友 ii 知道了一个秘密之后,会立马告诉朋友 aia_i

某日,朋友 xx 知道了高桥的一个秘密,并将这个秘密在高桥的这 nn 个朋友中按如上规则传来传去。请问:最后在高桥的朋友中会有多少人知道这个秘密呢?

4 2
3 1 1 2
3
20 12
7 11 10 1 7 20 14 2 17 3 2 5 19 20 8 14 18 2 10 10
7

提示

制約

  • 2  N  105 2\ \leq\ N\ \leq\ 10^5
  • 1  X  N 1\ \leq\ X\ \leq\ N
  • 1  Ai  N 1\ \leq\ A_i\ \leq\ N
  • Ai  i A_i\ \neq\ i
  • 入力はすべて整数

Sample Explanation 1

高橋君の秘密は以下の流れで友達 1 1 、友達 2 2 、友達 3 3 3 3 人に知れ渡ります。 - ある日、高橋君は秘密を友達 2 2 に知られてしまいました。 - 秘密を知った友達 2 2 は、その秘密を友達 1 1 に教えます。 - 秘密を知った友達 1 1 は、その秘密を友達 3 3 に教えます。 高橋君の秘密は最終的に 3 3 人の友達に知られることになるため、3 3 を出力します。