atcoder#APC001I. Simple APSP Problem

Simple APSP Problem

配点 : 20002000

問題文

H×WH \times W のマス目が与えられます。 左上隅のマス目を (0,0)(0, 0)、右下隅のマス目を (H1,W1)(H-1, W-1) と表すことにします。

マス目のうち、NN 個のマス目 (x1,y1),(x2,y2),...,(xN,yN)(x_1, y_1), (x_2, y_2), ..., (x_N, y_N) は黒く塗られており、残りは白く塗られています。

白いマス目 A,BA, B の間の最短距離を、AA から BB まで白いマス目のみを使用して移動するときの最短移動回数とします。 ただし、11 回の移動では、上下左右の隣りあったマス目に移動できるものとします。

白いマス目は全部で H×WNH \times W - N 個あるため、白いマス目から 22 つマス目を選ぶ方法は (H×WN)C2_{(H \times W-N)}C_2 通りあります。

この (H×WN)C2_{(H \times W-N)}C_2 通りそれぞれについて、選んだマスの間の最短距離を求め、 それを全て足して 1,000,000,007=109+71,000,000,007=10^9+7 で割った余りを求めてください。

制約

  • 1H,W1061 \leq H, W \leq 10^6
  • 1N301 \leq N \leq 30
  • 0xiH10 \leq x_i \leq H-1
  • 0yiW10 \leq y_i \leq W-1
  • iji \neq j ならば、xixjx_i \neq x_j または yiyjy_i \neq y_j
  • 白いマス目が 11 つ以上存在する
  • 全ての白いマス目 A,BA, B について、白いマス目のみを使用して AA から BB へ移動できる

入力

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

HH WW

NN

x1x_1 y1y_1

x2x_2 y2y_2

::

xNx_N yNy_N

出力

最短距離の総和を 109+710^9+7 で割った余りを出力してください。

2 3
1
1 1
20

マス目の色は以下のようになっています(.: 白いマス目, #: 黒いマス目)。

...
.#.

ここで,以下のように白いマス目にアルファベットを振ります。

ABC
D#E

すると,

  • dist(A, B) = 11
  • dist(A, C) = 22
  • dist(A, D) = 11
  • dist(A, E) = 33
  • dist(B, C) = 11
  • dist(B, D) = 22
  • dist(B, E) = 22
  • dist(C, D) = 33
  • dist(C, E) = 11
  • dist(D, E) = 44

であり,これらの総和は 2020 となります。

ただし,dist(A, B) はマス目A, Bの最短距離とします。

2 3
1
1 2
16

以下のように白いマス目にアルファベットを振ります。

ABC
DE#

すると,

  • dist(A, B) = 11
  • dist(A, C) = 22
  • dist(A, D) = 11
  • dist(A, E) = 22
  • dist(B, C) = 11
  • dist(B, D) = 22
  • dist(B, E) = 11
  • dist(C, D) = 33
  • dist(C, E) = 22
  • dist(D, E) = 11

であり,これらの総和は 1616 となります。

3 3
1
1 1
64
4 4
4
0 1
1 1
2 1
2 2
268
1000000 1000000
1
0 0
333211937