문제 링크
- https://icpc.me/1255
사용 알고리즘
- 선분 교차 판별
- 다익스트라
풀이
이동할 때 선분의 중간 지점을 방문하지 않고 끝점만 방문하는 최단 경로가 존재함은 쉽게 알 수 있습니다.
선분의 양 끝점을 정점으로 하는 visibility graph를 만듭시다. $O(M^2)$개의 정점 쌍에 대해 간선을 만들 수 있는지 $O(M)$ 시간에 확인하면 총 $O(M^3)$ 시간에 그래프를 만들 수 있습니다.
visibility graph를 만들었다면 정답을 구하는 것은 간단합니다. 각 사람마다 한 번에 갈 수 있는 선분의 끝점들을 구한 다음, multi source dijkstra와 비슷한 방식으로 최단 거리를 구하면 됩니다.
전체 코드
1 |
|