DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

드론

문제로 돌아가기

해설

모든 요청에서 제한 시간은 최대 500500500이다. 이 값을 TTT라 하자.

먼저 모든 두 거점 u,vu,vu,v에 대해 한 번에 이동할 때의 시간 w(u,v)w(u,v)w(u,v)와 배터리 c(u,v)c(u,v)c(u,v)를 계산한다. 이후 각 출발점 sss에 대해 확장 그래프에서 최단 경로를 한 번 구한다. 확장 그래프의 정점은 (v,au)(v, au)(v,au)이며, 이는 총 이동 시간이 정확히 τ\tauτ인 상태에서 vvv번 거점에 도착해 있음을 의미한다. τ+w(u,v)≤T\tau+w(u,v) \leq Tτ+w(u,v)≤T이면 (u,au)(u, au)(u,au)에서 (v,au+w(u,v))(v, au+w(u,v))(v,au+w(u,v))로 가는 간선을 두고, 이 간선의 비용을 c(u,v)c(u,v)c(u,v)로 둔다.

모든 간선 비용은 음수가 아니므로, 출발 상태 (s,0)(s,0)(s,0)에서 다익스트라 알고리즘을 수행하면 각 상태까지의 최소 배터리 소모를 얻을 수 있다. 다익스트라가 끝난 뒤 각 도착점 vvv와 시간 제한 ttt에 대해

min⁡0≤τ≤tdist⁡(v,τ)\min_{0 \leq \tau \leq t} \operatorname{dist}(v,\tau)0≤τ≤tmin​dist(v,τ)

를 미리 저장한다. 그러면 각 요청은 O(1)O(1)O(1)에 답할 수 있다.

이 방법은 경로의 이동 시간만 상태에 추가한 것이다. 어떤 실제 경로도 확장 그래프에서는 같은 순서의 상태 이동으로 표현되며, 총 비용은 원래 경로의 소모 배터리와 같다. 반대로 확장 그래프의 모든 경로는 실제 거점 이동 경로에 대응한다. 따라서 확장 그래프에서 얻은 최단 비용은 주어진 시간 이하로 이동하는 실제 경로의 최소 소모 배터리와 같다.

상태 수는 N(T+1)N(T+1)N(T+1)이고, 한 상태에서 최대 NNN개의 이동을 시도한다. 각 출발점마다 다익스트라를 수행하므로 전체 시간 복잡도는 O(N⋅NT⋅Nlog⁡(NT))O(N \cdot NT \cdot N \log (NT))O(N⋅NT⋅, 즉 이다. 주어진 제한에서 충분하다. 저장 공간은 이다.

Solution written by GPT5.5

N
log
(
N
T
))
O(N3Tlog⁡(NT))O(N^3T\log(NT))O(N3Tlog(NT))
O(N2T)O(N^2T)O(N2T)