코드
# bfs로 해결할 수 있을 거라 생각했지만, 가중치가 달라서 다익스트라 알고리즘 이용
import sys, heapq
input = sys.stdin.readline
INF = 987654321
tc = int(input())
def dijkstra(node, zido, hi):
queue = [(0,node)]
hi[node] = 0
while queue:
now, next = heapq.heappop(queue)
if now > hi[next]: continue
for i in zido[next]:
dist = now + i[1]
if hi[i[0]] > dist:
hi[i[0]] = dist
heapq.heappush(queue, (dist, i[0]))
for _ in range(tc):
n,d,c = map(int, input().split())
graph = [[] for _ in range(n+1)]
visited = [INF]*(n+1)
for _ in range(d):
a,b,s = map(int, input().split())
graph[b].append((a,s))
dijkstra(c,graph, visited)
cnt = 0
ans = 0
for i in visited:
if i != INF:
cnt += 1
ans = max(ans, i)
print(cnt, ans)
구현까지 잘해두고 출력에 애를 먹었던 문제.
'백준' 카테고리의 다른 글
[백준] 1092번 배 파이썬 코드 (1) | 2023.12.29 |
---|---|
[백준] 2206번 벽 부수고 이동하기 파이썬 코드 (0) | 2023.12.27 |
[백준] 1956번 운동 파이썬 코드 (0) | 2023.12.27 |
[백준] 2665번 미로만들기 파이썬 코드 (1) | 2023.12.20 |
[백준] 14284번 간선 이어가기 2 파이썬 코드 (1) | 2023.12.20 |
코드
# bfs로 해결할 수 있을 거라 생각했지만, 가중치가 달라서 다익스트라 알고리즘 이용
import sys, heapq
input = sys.stdin.readline
INF = 987654321
tc = int(input())
def dijkstra(node, zido, hi):
queue = [(0,node)]
hi[node] = 0
while queue:
now, next = heapq.heappop(queue)
if now > hi[next]: continue
for i in zido[next]:
dist = now + i[1]
if hi[i[0]] > dist:
hi[i[0]] = dist
heapq.heappush(queue, (dist, i[0]))
for _ in range(tc):
n,d,c = map(int, input().split())
graph = [[] for _ in range(n+1)]
visited = [INF]*(n+1)
for _ in range(d):
a,b,s = map(int, input().split())
graph[b].append((a,s))
dijkstra(c,graph, visited)
cnt = 0
ans = 0
for i in visited:
if i != INF:
cnt += 1
ans = max(ans, i)
print(cnt, ans)
구현까지 잘해두고 출력에 애를 먹었던 문제.
'백준' 카테고리의 다른 글
[백준] 1092번 배 파이썬 코드 (1) | 2023.12.29 |
---|---|
[백준] 2206번 벽 부수고 이동하기 파이썬 코드 (0) | 2023.12.27 |
[백준] 1956번 운동 파이썬 코드 (0) | 2023.12.27 |
[백준] 2665번 미로만들기 파이썬 코드 (1) | 2023.12.20 |
[백준] 14284번 간선 이어가기 2 파이썬 코드 (1) | 2023.12.20 |