알고리즘 공부

[BOJ] 파티(1238) 문제 풀기 | Python3

유나쒸 2021. 10. 2. 22:17


문제 풀이)

각 i 별, dijstra(x_to_i) + dijstra(i_to_x) 의 합 중 가장 큰 값을 구하면 되는 문제 입니다.

 

코드)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from heapq import heappush, heappop
 
def dijstra(graph, start):
    distance=[int(1e9)]*len(graph)
    distance[start]=0
    q=[]
    heappush(q, (0,start))
    while q:
        dist, v = heappop(q)
        if dist > distance[v]: continue
        for adj, d in graph[v]:
            cost=distance[v]+d
            if distance[adj]>cost:
                distance[adj]=cost
                heappush(q,(cost,adj))
    return distance[1:]
 
if __name__=="__main__":
    v, e, start = map(int, input().split())
    graph=[[] for _ in range(v+1)]
    for _ in range(e):
        f,t,d=map(int,input().split())
        graph[f].append((t,d))
    
    i_to_x=dijstra(graph, start)
    x_to_i=[i_to_x[i-1]+dijstra(graph,i)[start-1for i in range(1,v+1)]
    print(max(x_to_i))
cs