幅優先探索ドリルのサムネイル
(問題 32)長距離移動 PHP編(paizaランク S 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

整数 N, M_1, M_2 が与えられます。N 個の頂点があるグラフを与えられます。

昼間は M_1 個の辺があり、i (1 ≦ i ≦ M_1) 番目の辺は頂点 a_i と頂点 b_i を結んでいます。

夜間は M_2 個の辺があり、i (1 ≦ i ≦ M_2) 番目の辺は頂点 c_i と頂点 d_i を結んでいます。

現在昼間で頂点 1 にいます。隣接する頂点に移動するたび昼夜が入れ替わります。

頂点 N にたどり着くまでに必要な移動回数の最小値を求めてください。ただし、たどり着くことが出来ない場合は -1 とします。

入力される値

N M_1 M_2
a_1 b_1
a_2 b_2
...
a_{M_1} b_{M_1}
c_1 d_1
c_2 d_2
...
c_{M_2} d_{M_2}


1 行目には 3 つの整数 N, M_1, M_2 が与えられます。

1 + i (1 ≦ i ≦ M_1) 行目には 2 つの整数 a_i, b_i が与えられます。

1 + i + M_1 (1 ≦ i ≦ M_2) 行目には 2 つの整数 c_i, d_i が与えられます。

入力は合計で 1 + M_1 + M_2 行からなり、入力値最終行の末尾に改行が 1 つ入ります。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

答えを 1 行で出力してください。

条件

すべてのテストケースにおいて、以下の条件をみたします。

  • 2 ≦ N ≦ 10000

  • 1 ≦ M_1, M_2 ≦ min(N × (N - 1) / 2, 200000)

  • 1 ≦ a_i, b_i ≦ N (1 ≦ i ≦ M_1)

  • a_i ≠ b_i (1 ≦ i ≦ M_1)

  • 1 ≦ c_i, d_i ≦ N (1 ≦ i ≦ M_2)

  • c_i ≠ d_i (1 ≦ i ≦ M_2)

  • 昼間も夜間も与えられるグラフは連結グラフ
  • 入力例1

    5 4 4
    1 2
    1 4
    3 4
    3 5
    1 2
    2 3
    1 5
    2 4

    出力例1

    3

    入力例2

    3 2 2
    1 3
    2 3
    1 2
    2 3

    出力例2

    1

    問題一覧へ戻る

    1. paizaトップ
    2. レベルアップ問題集
    3. 幅優先探索ドリル(言語選択)
    4. 問題一覧 PHP編
    5. (問題 32)長距離移動 PHP編
    ページの先頭へ戻る