문제
풀이
장애물의 끝 점을 정점으로 하는 그래프를 만들고 백성의 위치를 시작으로 하여 $y = 0$에 도달하는 최소 시간을 데이크스트라 알고리즘을 이용해 찾으면 됩니다.
구현의 편의를 위해, 그래프는 장애물의 끝 점만을 이용하여 만듭니다. 만약 두 점을 이은 직선과 교차하는 장애물이 없다면 간선을 이어줍니다.
이때, 장애물과 한 점에서 만나는 경우는 당연히 제외해야 합니다. 문제에서 직선 장애물이 서로 교차하지 않는다고 주어졌으므로 장애물의 양 끝 점과 고른 두 점중 점이 하나라도 같은 것이 존재하는지 확인하면 됩니다.
백성을 시작으로 $y = 0$에 도달하는 최소 시간 중 최댓값이 답이 됩니다.
정점의 개수는 최대 $2(N + 2M)$이고 간선의 개수는 최대 이것의 제곱이므로 시간 복잡도는 대략 $\mathcal{O}(4(N + 2M)^2\log 4(N + 2M)^2)$이 됩니다. 구현을 조금 비효율적으로 해도 $N$과 $M$이 매우 작으므로 통과할 수 있습니다.
코드
1 |
|