간단한 APSP 문제
시간 제한3초메모리 제한256 MB
최대 30개의 검은 칸이 있는 매우 큰 H×W 격자에서 모든 흰 칸 쌍의 최단 거리 합을 10^9+7로 나눈 나머지로 구합니다.
문제
크기의 격자가 있다. 왼쪽 위 칸의 인덱스는 이고, 오른쪽 아래 칸의 인덱스는 이다.
개의 칸 은 검은색으로 칠해져 있고, 나머지 칸은 모두 흰색이다.
흰색 칸 와 의 최단 거리는 흰색 칸만 거쳐서 에서 까지 갈 때 필요한 최소 이동 횟수이다. 한 번의 이동으로 상하좌우에 인접한 칸으로 갈 수 있다.
흰색 칸은 개이므로, 그중 두 칸을 고르는 방법은 가지이다. 각 경우마다 두 칸의 최단 거리를 구한 뒤, 그 합을 로 나눈 나머지를 구하라.
입력
입력은 다음 형식으로 주어진다.
H W
N
x_1 y_1
x_2 y_2
...
x_N y_N
출력
최단 거리의 총합을 로 나눈 나머지를 출력하라.
제한
- ,
- 이면 또는 이다.
- 흰색 칸은 적어도 한 개 있다.
- 임의의 흰색 칸 , 에 대해, 흰색 칸만 거쳐서 에서 로 갈 수 있다.
힌트
첫 번째 예시의 격자는 다음과 같다. '.'은 흰색 칸, '!'은 검은색 칸이다.
...
.!.
흰색 칸에 다음과 같이 알파벳을 붙인다.
ABC
D!E
그러면 , , , , , , , , , 이고, 이들의 합은 이다.
두 번째 예시에서는 다음과 같이 알파벳을 붙인다.
ABC
DE!
이때 거리의 합은 이다.