몬스터와 함께하는 여행 5초 512MB
문제
지우는 광활한 필드에서 여행을 하려고 한다.
필드는
지우가 필드에서 이동할 때 현재 위치에서 상, 하, 좌, 우 네 방향으로 이동할 수 있으며,
필드의 범위를 벗어난 방향 또는 벽이 있는 방향으로는 이동할 수 없다.
필드에는
반대로, 마을이 없는 땅에는 강력한 야생 몬스터가 한 마리 살고 있어서 해당 땅을 지나가는 사람들을 공격한다.
지우는 안전한 여행을 위해 몬스터를 몇 마리 데리고 가려고 한다.
지우가 자기 몬스터들을 데리고 마을에 있는 몬스터 치료소에 방문하면 쓰러진 몬스터들을 모두 회복시킬 수 있다.
만약 지우가 마을이 없는 땅에 방문한다면 야생 몬스터가 지우가 데리고 있는 살아있는 몬스터를 한 마리 공격한다.
공격받은 몬스터는 쓰러지며 몬스터 치료소에 방문하여 치료하기 전까지는 되살아나지 않는다.
만약 지우의 모든 몬스터가 쓰러진 상태에서 야생 몬스터를 만난다면 야생 몬스터가 지우를 공격하게 되어 지우가 쓰러진다.
같은 지역에 여러 번 방문한다면 야생 몬스터는 해당 지역에 방문할 때마다 공격을 실시한다.
지우는 자신이 공격받지 않도록 몬스터를 적당히 데리고 한 마을에서 다른 마을로 여행하려고 한다.
하지만 몬스터를 너무 많이 데리고 간다면 짐가방이 무거워지므로 몬스터는 가능한 한 최소한만 데리고 가려고 한다.
지우의 여행계획
입력
첫 번째 줄에는 필드의 세로, 가로 크기
다음 .와 #로 이루어진 길이
필드의 각 칸이 땅인 경우 .이고 벽인 경우 #이다.
다음
이는 마을 .)이어야 한다.
다음
이는 마을
제한
1 ≤ H ≤ 2 000
1 ≤ W ≤ 2 000
2 ≤ P ≤ 200 000
1 ≤ Q ≤ 200 000
1 ≤ Aj ≤ H (1 ≤ j ≤ P)
1 ≤ Bj ≤ W (1 ≤ j ≤ P)
(Ai, Bi) ≠ (Aj, Bj) (1 ≤ i < j ≤ P)
1 ≤ Si < Ti ≤ P (1 ≤ i ≤ Q)
출력
부분문제
| 번호 | 점수 | 조건 |
|---|---|---|
| #1 | 10점 | |
| #2 | 30점 | |
| #3 | 30점 | |
| #4 | 30점 | 추가 제약 조건은 없다. |
예제 #1
5 5 4 4
.....
..##.
.#...
..#..
.....
1 1
4 2
3 3
2 5
1 2
2 4
1 3
3 4
3
4
4
2
입력으로 주어진 필드의 모양은 아래와 같다. 격자 내 숫자는 마을을, ■는 벽을 의미한다.
해당 필드에서 두 번째 질문(마을 2 → 마을 4)의 여행경로로 가능한 예시는 아래와 같다.
왼쪽 방법은 야생 몬스터한테 6번의 공격을 받고 오른쪽 방법은 야생 몬스터한테 7번의 공격을 받는다. 하지만 오른쪽 방법에서는 1번 마을에서 몬스터를 치료할 수 있기 때문에 몬스터를 4마리만 갖고 가더라도 충분하다. 몬스터를 3마리 이하로 들고 가는 방법은 존재하지 않는다.
예제 #2
5 5 3 2
...#.
..#..
#....
.##..
...#.
1 3
5 2
1 5
1 2
1 3
-1
7