atcoder#ABC168D. [ABC168D] .. (Double Dots)
[ABC168D] .. (Double Dots)
配点: 点
問題文
あるところに、洞窟があります。
洞窟には 個の部屋と 本の通路があり、部屋には から の、通路には から の番号がついています。通路 は部屋 と部屋 を双方向につないでいます。どの 部屋間も、通路をいくつか通って行き来できます。部屋 は洞窟の入り口がある特別な部屋です。
洞窟の中は薄暗いので、部屋 以外の各部屋に つずつ道しるべを設けることにしました。各部屋の道しるべは、その部屋と通路で直接つながっている部屋の つを指すように置きます。
洞窟の中は危険なので、部屋 以外のどの部屋についても以下の条件を満たすことが目標です。
- その部屋から出発し、「いまいる部屋にある道しるべを見て、それが指す部屋に移動する」ことを繰り返すと、部屋 に最小の移動回数でたどり着く。
目標を達成できる道しるべの配置が存在するか判定し、存在するならばそのような配置を つ出力してください。
制約
- 入力はすべて整数
- どの 部屋間も、通路をいくつか通って行き来できる
入力
入力は以下の形式で標準入力から与えられる。
出力
目標を達成できる道しるべの配置が存在しなければ No
を出力せよ。
存在する場合、 行出力せよ。 行目には Yes
を、 行目には部屋 の道しるべが指す部屋の番号を出力せよ。
4 4
1 2
2 3
3 4
4 2
Yes
1
2
2
出力例のように道しるべを置いたとき、
- 部屋 から出発した場合 と 回移動することになり、これが最小です。
- 部屋 から出発した場合 と 回移動することになり、これが最小です。
- 部屋 から出発した場合 と 回移動することになり、これが最小です。
したがって、出力例のように道しるべを置けば目標を達成できます。
6 9
3 4
6 1
2 4
5 3
4 6
1 5
6 2
4 5
5 6
Yes
6
5
5
1
1
答えが複数あり得る場合、どれを出力してもかまいません。