[BOJ 11900] 차이 그래프
View as PDF
Submit solution
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text
Points:
4
Time limit:
1.0s
Memory limit:
32M
Problem types
Allowed languages
승현이는 정점의 개수가 N개인 방향성 그래프 G와 음이 아닌 정수들로 구성된 배열 A[1],A[2],⋯,A[N−1]을 가지고 있습니다. 정점들에는 0 이상 N−1 이하의 정수 번호가 붙어 있으며, 각 간선에는 가중치가 존재합니다. 초기에 이 방향성 그래프에는 간선이 하나도 없었기 때문에, 승현이는 허전함을 느꼈습니다. 이에 그는 아래와 같은 방식으로 간선들을 잇기로 했습니다.</p>
- 임의의 두 정점 u와 v (0≤u,v<N,u≠v)에 대하여,
- 만약 u>v이고 A[u−v]의 값이 양수라면, u에서 v로 향하는 가중치가 A[u−v]인 간선을 추가합니다.
- 만약 u<v이고 A[u−v+N]의 값이 양수라면, u에서 v로 향하는 가중치가 A[u−v+N]인 간선을 추가합니다.
승현이는 이렇게 간선을 추가한 뒤에 임의의 정점에서 출발하여 다른 정점에 도착하는 최단 경로의 길이를 구하고자 합니다.
입력 형식
첫 번째 줄에 그래프 G의 정점의 수 N (5≤N≤2,000)이 주어집니다. 두 번째 줄에 A[1],A[2],⋯,A[N−1] (0≤A[1],A[2],⋯,A[N−1]≤10,000)이 공백을 사이로 두고 주어집니다. 세 번째 줄에 질의의 수 Q (1≤Q≤200,000)가 주어집니다. 이후 Q개 줄이 주어지는데, 이 중 i번째 줄 (1≤i≤Q)에는 두 개의 정수 ai와 bi (0≤ai,bi<N, ai≠bi)가 공백을 사이로 두고 주어집니다.
출력 형식
여러분은 각 질의마다 ai번 정점에서 출발하여 bi번 정점에 도착하는 최단 경로의 길이를 한 줄에 하나씩 입력에서 주어진 순서대로 출력해야 합니다. 단 이러한 최단 경로가 존재하지 않을 경우 −1을 출력합니다.
예제 입력 1
5 3 2 0 0 4 1 0 2 1 3 0 0 1예제 출력 1
3 3 5 4예제 입력 2
6 0 3 0 0 0 4 0 4 1 2 2 3 4 0예제 출력 2
3 -1 -1 6
Comments