問題一覧 > 通常問題

No.101 ぐるぐる!あみだくじ!

レベル : / 実行時間制限 : 1ケース 5.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 156
作問者 : koyumeishi
5 ProblemId : 213 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2015-11-14 17:47:14

問題文

太郎君が1,2,...,Nという数列を あみだくじ でシャッフルして遊んでいたところ、 あみだくじでシャッフルされた数列を、更に何度か同じあみだくじでシャッフルすると、 元の1,2,...,Nという数列に戻ることに気が付きました。

例えば次のあみだくじは数列1,2,33,1,2へとシャッフルします。

このあみだくじで数列を更に2回、つまり合計3回シャッフルすることで、数列は元の数列に戻ります。
1,2,33,1,22,3,11,2,3

太郎君はあるあみだくじで何度シャッフルを繰り返せば元の数列の戻るのか気になりましたが、 わざわざ手であみだくじを辿っていくのは大変です。 太郎君の代わりに数列1,2,...,Nを元の数列1,2,...,Nに戻すために必要な最小のシャッフル回数Sを計算してあげてください。 ただし、シャッフルは少なくとも1回は行うものとします。

入力

あみだくじはN本の縦線と、それに垂直なK本の横棒で構成されています。
K本の横棒はいずれも異なる高さにあり、上からk番目の横棒は、左からXk番目の縦線と 左からYk番目の縦線を繋いでいます。
数列のi番目の数はあみだくじの左からi番目の縦線を上から下へと辿っていき、 途中で横棒と接触すると、その横棒と繋がっている縦線へ移動し、また下へとその縦線を辿っていきます。 縦線の一番下へたどり着いたとき、あみだくじの左からj番目の縦線にいた場合、 その数は新しくシャッフルされた数列のj番目の数になります。

入力は以下の形で与えられます。

N
K
X1 Y1
X2 Y2

Xi Yi

XK YK

1行目には縦棒の数Nが与えられます。
2行目には横棒の数Kが与えられます。
3行目から続くK行に、上からi番目の横棒が繋ぐ縦線の情報が与えられます。 上からi番目の横棒は左から数えてXi番目とYi番目の縦線をつないでいます。

入力は全て整数で、以下の制約を満たします。
2N100
0K1000
1Xi<YiN
Xi+1=Yi

出力

S

数列1,2,...,Nを元の数列1,2,...,Nに戻すために必要な最小のシャッフル回数Sを1行で出力してください。

サンプル

サンプル1
入力
3
2
2 3
1 2
出力
3

説明文の例です。シャッフルを3回繰り返すことで数列は元に戻ります。
1,2,33,1,22,3,11,2,3

サンプル2
入力
5
5
1 2
3 4
2 3
1 2
3 4
出力
2

横棒と繋がっていない縦線が存在する場合もあります。このケースでは2回シャッフルすると元に戻ります。
1,2,3,4,54,2,3,1,51,2,3,4,5

サンプル3
入力
4
6
1 2
2 3
3 4
3 4
2 3
1 2
出力
1

必ず1回はシャッフルを行います。
1,2,3,41,2,3,4

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。