[Silver II] Title: 특정 거리의 도시 찾기, Time: 1912 ms, Memory: 118956 KB -BaekjoonHub
This commit is contained in:
38
백준/Silver/18352. 특정 거리의 도시 찾기/README.md
Normal file
38
백준/Silver/18352. 특정 거리의 도시 찾기/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# [Silver II] 특정 거리의 도시 찾기 - 18352
|
||||
|
||||
[문제 링크](https://www.acmicpc.net/problem/18352)
|
||||
|
||||
### 성능 요약
|
||||
|
||||
메모리: 118956 KB, 시간: 1912 ms
|
||||
|
||||
### 분류
|
||||
|
||||
너비 우선 탐색, 데이크스트라, 그래프 이론, 그래프 탐색, 최단 경로
|
||||
|
||||
### 제출 일자
|
||||
|
||||
2025년 2월 27일 00:14:07
|
||||
|
||||
### 문제 설명
|
||||
|
||||
<p>어떤 나라에는 1번부터 <em>N</em>번까지의 도시와 <em>M</em>개의 단방향 도로가 존재한다. 모든 도로의 거리는 1이다.</p>
|
||||
|
||||
<p>이 때 특정한 도시 <em>X</em>로부터 출발하여 도달할 수 있는 모든 도시 중에서, 최단 거리가 정확히 <em>K</em>인 모든 도시들의 번호를 출력하는 프로그램을 작성하시오. 또한 출발 도시 <em>X</em>에서 출발 도시 <em>X</em>로 가는 최단 거리는 항상 0이라고 가정한다.</p>
|
||||
|
||||
<p>예를 들어 <em>N</em>=4, <em>K</em>=2, <em>X</em>=1일 때 다음과 같이 그래프가 구성되어 있다고 가정하자.</p>
|
||||
|
||||
<p style="text-align: center;"><img alt="" src="" style="height: 249px; width: 250px;"></p>
|
||||
|
||||
<p style="text-align: justify;">이 때 1번 도시에서 출발하여 도달할 수 있는 도시 중에서, 최단 거리가 2인 도시는 4번 도시 뿐이다. 2번과 3번 도시의 경우, 최단 거리가 1이기 때문에 출력하지 않는다.</p>
|
||||
|
||||
### 입력
|
||||
|
||||
<p>첫째 줄에 도시의 개수 <em>N</em>, 도로의 개수 <em>M</em>, 거리 정보 <em>K</em>, 출발 도시의 번호 <em>X</em>가 주어진다. (2 ≤ <em>N </em>≤ 300,000, 1 ≤ <em>M </em>≤ 1,000,000, 1 ≤ <em>K </em>≤ 300,000, 1 ≤ <em>X </em>≤ <em>N</em>) 둘째 줄부터 <em>M</em>개의 줄에 걸쳐서 두 개의 자연수 <em>A</em>, <em>B</em>가 공백을 기준으로 구분되어 주어진다. 이는 <em>A</em>번 도시에서 <em>B</em>번 도시로 이동하는 단방향 도로가 존재한다는 의미다. (1 ≤ <em>A</em>, <em>B </em>≤ <em>N</em>) 단, <em>A</em>와 <em>B</em>는 서로 다른 자연수이다.</p>
|
||||
|
||||
### 출력
|
||||
|
||||
<p><em>X</em>로부터 출발하여 도달할 수 있는 도시 중에서, 최단 거리가 <em>K</em>인 모든 도시의 번호를 한 줄에 하나씩 오름차순으로 출력한다.</p>
|
||||
|
||||
<p>이 때 도달할 수 있는 도시 중에서, 최단 거리가 <em>K</em>인 도시가 하나도 존재하지 않으면 -1을 출력한다.</p>
|
||||
|
||||
51
백준/Silver/18352. 특정 거리의 도시 찾기/특정 거리의 도시 찾기.py
Normal file
51
백준/Silver/18352. 특정 거리의 도시 찾기/특정 거리의 도시 찾기.py
Normal file
@@ -0,0 +1,51 @@
|
||||
import sys
|
||||
from collections import defaultdict
|
||||
import math
|
||||
from collections import deque
|
||||
|
||||
sys.setrecursionlimit(10**6)
|
||||
|
||||
input = sys.stdin.readline
|
||||
|
||||
N, M, K, X = map(int, input().split())
|
||||
route = defaultdict(list)
|
||||
visited = [-1] * (N+1)
|
||||
|
||||
def makeroute(A, B):
|
||||
if not route[A]:
|
||||
route[A] = []
|
||||
route[A].append(B)
|
||||
|
||||
def BFS(start, route):
|
||||
queue = deque()
|
||||
queue.append(start)
|
||||
visited[start] += 1
|
||||
while queue:
|
||||
temp = queue.popleft()
|
||||
for neighbor in route[temp]:
|
||||
if visited[neighbor] == -1:
|
||||
visited[neighbor] = visited[temp] + 1
|
||||
queue.append(neighbor)
|
||||
|
||||
|
||||
|
||||
for i in range(M):
|
||||
A, B = map(int, input().split())
|
||||
makeroute(A,B)
|
||||
|
||||
BFS(X, route)
|
||||
|
||||
answer =[]
|
||||
|
||||
for i in range(N+1):
|
||||
if visited[i] == K:
|
||||
answer.append(i)
|
||||
|
||||
|
||||
if(not answer):
|
||||
print('-1')
|
||||
else:
|
||||
answer.sort()
|
||||
for i in answer:
|
||||
print(i)
|
||||
|
||||
Reference in New Issue
Block a user