TeraCoder2024
コンテスト日時
2024/12/22 (Su) 14:00 - 18:00

K - Say!Yes!Kyosan Beam

Assam
2
s
1024
MB
200

問題文

寺子さんは天文台から京都市内に向けて京産ビームを放つことにしました。ビームは一方向にしか進みません。京都市内には京産ビームの増幅装置が$N$個あり、各増幅装置には$1$から$N$までの数字が割り振られています。増幅装置は0個以上の別の増幅装置に京産ビームを放っています。最初、寺子さんは1番目の増幅装置にのみ京産ビームを放っており、ビームの本数は$M+1$本です。$i=1,2,…,M$ に対し、$i$番目のビームは増幅装置$a_i$から増幅装置$b_i$にビームを放っています。
ある増幅装置から、別の増幅装置に京産ビームを放ち、最終的に元の増幅装置に京産ビームが放たれることを、京産サイクルと定義します。この京産サイクルが発生すると、増幅装置が互いに増幅し合い、京産サイクル上の増幅装置が全て爆発してしまいます。
京産サイクルが発生するなら爆発した増幅装置の個数の合計を、発生しないなら$Happy$を出力してください。

制約

  • $1 \leq N \leq 10^4$
  • $1 \leq a_i \leq N$
  • $ 1 \leq b_i \leq N$
  • $ a_i \neq b_i $
  • $ 0 \leq M \leq 2\times10^4 $
  • 入力は全て整数

入力

1行目に京産ビームの増幅装置の数を表す $N$ と、ビームの本数を表す $M$ が空白区切りで与えられます。
増幅装置 $a_i$ から増幅装置 $b_i$ にビームが放たれていることを表す $a_i, b_i$ が空白区切りで $M$ 行与えられます。

$N$ $M$
$a_1$ $b_1$
.
.
.
$a_M$ $b_M$

出力

爆発した増幅装置の個数の合計もしくは$Happy$を1行で出力してください。

入力例 1
4 4 1 2 2 3 3 4 4 2
出力例 1
3
  • Example1説明画像
    $2 \to 3 \to 4 \to 2$と京産サイクルが発生しています。
    よって爆発した増幅装置の個数は$3$なので、$3$を出力します。
入力例 2
6 8 1 2 2 3 3 4 4 2 1 5 5 6 6 3 4 5
出力例 2
5
  • Example2説明画像
    $2 \to 3 \to 4 \to 2$と$5 \to 6 \to 3 \to 4 \to 5$の2つの京産サイクルが発生しているように見えますが、$3 \to 4$の部分で共有しているので、{$2, 3, 4, 5, 6$}の増幅装置を含む1つの京産サイクルとみなします。よって5を出力します。
入力例 3
4 3 1 2 1 3 2 4
出力例 3
Happy
  • Example3説明画像
    京産サイクルは発生していないので、$Happy$を出力します。
提出
C++23 (g++ 12.2.0)