from collections import deque
import sys
input = sys.stdin.readline
n, m, k, x = map(int, input().split()) #도시 개수 n, 도로 개수 m, 거리 정보 k, 출발 도시 x
city = [[] for _ in range(n + 1)] # 빈 도시 정보 list
for i in range(m): # 각 도시별 연결된 도로 정보 list에 담기
c, road = map(int, input().split())
city[c].append(road)
distance = [-1] * (n + 1) # 출발 도시로부터의 거리 list
distance[x] = 0 # 출발 도시의 거리 = 0
q = deque([x]) # 출발 도시부터 처리
while q: # q가 빌때까지
c = q.popleft() # 큐에서 원소를 하나 뽑아 출력
for i in city[c]: # 인접 도시 탐색
if distance[i] > k:
break
if distance[i] == -1: # 아직 방문하지 않았다면
q.append(i) # 큐에 추가
distance[i] = distance[c] + 1 # 출발 도시로부터의 거리 입력
answer = False
for i in range(1, n + 1):
if distance[i] == k:
answer = True
print(i)
if answer == False: # 만약 k거리의 도시가 존재하지 않는다면
print(-1)
: 아니 왜 시간초과지?!
import sys
input = sys.stdin.readline
if distance[i] == k: # 만약 출발 도시로부터의 거리가 k라면
answer = True
print(i) # 도시 출력
: 이렇게 하면, 도시 번호를 오름차순으로 출력할 수 없다! 결국 for문 따로 돌려야함.
answer = True
를 안 넣은 이유from collections import deque
# 도시 개수 n, 도로 개수 m, 최단 거리 k, 출발 도시 x
n, m, k, x = map(int, input().split())
# 도시 간 연결 정보 초기화
city = [[] for _ in range(n+1)]
# 연결된 도시 정보 저장
for _ in range(m):
a, b = map(int, input().split())
city[a].append(b)
# 거리 정보 초기화
distance = [-1] * (n+1)
distance[x] = 0 # 출발 도시의 거리 = 0
# x 도시에서 출발
q = deque([x])
# 계속 도시가 연결되어 있는 한
while q:
name = q.popleft() # 현재 출발 도시
for c in city[name]: # 연결된 도시 탐색
if distance[c] == -1: # 아직 탐색 전이면
distance[c] = distance[name] + 1 # 거리 +1
q.append(c) # 다녀갈 도시에 추가
if k in distance: # k 거리의 도시가 있다면
for city_name, dist in enumerate(distance):
if dist == k:
print(city_name)
else: # k 거리의 도시가 없다면
print(-1)
from collections import deque
import sys
input = sys.stdin.readline
n, m, k, x = map(int, input().split()) #도시 개수 n, 도로 개수 m, 거리 정보 k, 출발 도시 x
city = [[] for _ in range(n + 1)] # 빈 도시 정보 list
for i in range(m): # 각 도시별 연결된 도로 정보 list에 담기
c, road = map(int, input().split())
city[c].append(road)
distance = [-1] * (n + 1) # 출발 도시로부터의 거리 list
distance[x] = 0 # 출발 도시의 거리 = 0
q = deque([x]) # 출발 도시부터 처리
while q: # q가 빌때까지
c = q.popleft() # 큐에서 원소를 하나 뽑아 출력
for i in city[c]: # 인접 도시 탐색
if distance[i] == -1: # 아직 방문하지 않았다면
q.append(i) # 큐에 추가
distance[i] = distance[c] + 1 # 출발 도시로부터의 거리 입력
answer = False
for i in range(1, n + 1):
if distance[i] == k: # 만약 출발 도시로부터의 거리가 k라면
print(i) # 도시 출력
answer = True
if answer == False: # 만약 k거리의 도시가 존재하지 않는다면
print(-1)
: 하도 답답해서 책을 봤더니, 나랑 유사한 코드더라. 그래서 아니 코드가 비슷해보이는데 내껀 왜 시간초과지? 하고 책 코드를 백준에 입력했다. 그랬더니.....시간초과 남;
import sys
input = sys.stdin.readline