chldkato

백준 1238 파티 (파이썬) 본문

백준

백준 1238 파티 (파이썬)

chldkato 2020. 2. 17. 01:46

https://www.acmicpc.net/problem/1238

 

1238번: 파티

문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이 도로들은 단방향이기 때

www.acmicpc.net

다익스트라로 최단 시간에 해당하는 경로를 구한다

 

1. 끝점 까지 가는 최단 시간 경로를 구한다

2. 다시 시작점으로 돌아오는 최단 시간 경로를 구한다

3. 1번과 2번값을 더하여 저장한 후 그 중에서 최대값을 출력

import sys, heapq

INF = sys.maxsize
input = sys.stdin.readline

def dij(x):
    d = [INF]*n
    heapq.heappush(heap, [0, x])
    d[x] = 0
    while heap:
        w, x = heapq.heappop(heap)
        for nw, nx in a[x]:
            nw += w
            if nw < d[nx]:
                d[nx] = nw
                heapq.heappush(heap, [nw, nx])
    return d

n, m, t = map(int, input().split())
a = [[]*n for _ in range(n)]
heap = []

for i in range(m):
    x, y, w = map(int, input().split())
    a[x-1].append([w, y-1])

ans = [0]*n
for i in range(n):
    d = dij(i)
    ans[i] += d[t-1]
    d = dij(t-1)
    ans[i] += d[i]
print(max(ans))

Comments