atcoder#ABC224D. [ABC224D] 8 Puzzle on Graph

[ABC224D] 8 Puzzle on Graph

配点 : 400400

問題文

高橋君は道端であるパズルを拾いました。 このパズルは、99 個の頂点と MM 本の辺からなる無向グラフ、および、88 つのコマで構成されます。

グラフの 99 つの頂点はそれぞれ頂点 11、頂点 22\ldots、頂点 99 と呼ばれ、 i=1,2,,Mi = 1, 2, \ldots, M について、ii 番目の辺は頂点 uiu_i と頂点 viv_i を結んでいます。 88 つのコマはそれぞれコマ 11、コマ 22\ldots、コマ 88 と呼ばれ、 j=1,2,,8j = 1, 2, \ldots, 8 について、コマ jj は頂点 pjp_j に置かれています。 ここで、すべてのコマはそれぞれ異なる頂点に置かれていることが保証されます。 コマが置かれていない「空の頂点」がただ一つ存在することに注意してください。

高橋君はこのパズルに対して下記の操作を好きな回数( 00 回でもよい)だけ行うことができます。

空の頂点に隣接する頂点に置かれたコマを 11 つ選び、選んだコマを空の頂点に移動する。

高橋君は上記の操作を繰り返して、このパズルを「完成」させようとしています。 パズルは、下記の状態を満たしたときに完成となります。

j=1,2,,8j = 1, 2, \ldots, 8 について、コマ jj は 頂点 jj に置かれている。

高橋君がパズルを完成させることが可能かどうかを判定し、可能な場合はそのために必要な操作回数の最小値を出力してください。

制約

  • 0M360 \leq M \leq 36
  • 1ui,vi91 \leq u_i, v_i \leq 9
  • 与えられるグラフは多重辺、自己ループを持たない
  • 1pj91 \leq p_j \leq 9
  • jjpjpjj \neq j' \Rightarrow p_j \neq p_{j'}
  • 入力はすべて整数

入力

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

MM

u1u_1 v1v_1

u2u_2 v2v_2

\vdots

uMu_M vMv_M

p1p_1 p2p_2 \ldots p8p_8

出力

高橋君がパズルを完成させることが可能な場合は、そのために必要な操作回数の最小値を出力せよ。 高橋君がパズルを完成させることが不可能な場合は、1-1 を出力せよ。

5
1 2
1 3
1 9
2 9
3 9
3 9 2 4 5 6 7 8
5

下記の手順によって、55 回の操作でパズルを完成させることができます。

  1. コマ 22 を頂点 99 から頂点 11 に移動する。
  2. コマ 33 を頂点 22 から頂点 99 に移動する。
  3. コマ 22 を頂点 11 から頂点 22 に移動する。
  4. コマ 11 を頂点 33 から頂点 11 に移動する。
  5. コマ 33 を頂点 99 から頂点 33 に移動する。

一方、55 回未満の操作でパズルを完成させることはできません。よって、55 を出力します。 与えられるグラフは連結とは限らないことに注意してください。

5
1 2
1 3
1 9
2 9
3 9
1 2 3 4 5 6 7 8
0

パズルは初めから完成しています。よって、完成させるために必要な操作回数の最小値は 00 回です。

12
8 5
9 6
4 5
4 1
2 5
8 9
2 1
3 6
8 7
6 5
7 4
2 3
1 2 3 4 5 6 8 7
-1

操作の繰り返しによってパズルを完成させることができないので、1-1 を出力します。

12
6 5
5 4
4 1
4 7
8 5
2 1
2 5
6 9
3 6
9 8
8 7
3 2
2 3 4 6 1 9 7 8
16