|
| 1 | +# https://www.acmicpc.net/problem/1238 |
| 2 | +# 파티, 골드3 |
| 3 | + |
| 4 | +import sys |
| 5 | +import copy |
| 6 | +from collections import deque, defaultdict |
| 7 | +from typing import List |
| 8 | +sys.stdin = open('../../../input.txt', 'r') |
| 9 | + |
| 10 | +inputs = list(map(int,input().split(" "))) |
| 11 | + |
| 12 | +# N(마을 개수), M(단방향 도로 개수), X(목적지 마을 번호) |
| 13 | +N = int(inputs[0]) |
| 14 | +M = int(inputs[1]) |
| 15 | +X = int(inputs[2]) - 1 |
| 16 | +INF = float('inf') |
| 17 | + |
| 18 | +graph = [[INF] * N for _ in range(N)] |
| 19 | +reversed_graph = [[INF] * N for _ in range(N)] |
| 20 | +for _ in range(M): |
| 21 | + inputs = list(map(int,input().split(" "))) |
| 22 | + start = int(inputs[0])-1 |
| 23 | + end = int(inputs[1])-1 |
| 24 | + dist = int(inputs[2]) |
| 25 | + graph[start][end] = dist # start -> end 거리 dist |
| 26 | + reversed_graph[end][start] = dist # start -> end 거리 dist |
| 27 | + |
| 28 | +for i in range(N): |
| 29 | + graph[i][i] = 0 |
| 30 | + reversed_graph[i][i] = 0 |
| 31 | + |
| 32 | +def print_2d_arr(array): |
| 33 | + for arr in array: |
| 34 | + print(arr) |
| 35 | + |
| 36 | +def getMinNode(distance,visited,N): |
| 37 | + minNode = -1 |
| 38 | + minDist = INF |
| 39 | + for node in range(N): |
| 40 | + if(not visited[node] and distance[node] < minDist): |
| 41 | + minNode = node |
| 42 | + minDist = distance[node] |
| 43 | + return minNode |
| 44 | + |
| 45 | +# start에서 출발하는 최단거리 |
| 46 | +def dijkstra(graph,start,N): |
| 47 | + visited = [False] * N |
| 48 | + distance = graph[start] |
| 49 | + |
| 50 | + visited[start] = True |
| 51 | + |
| 52 | + for _ in range(N): |
| 53 | + node = getMinNode(distance,visited,N) |
| 54 | + |
| 55 | + visited[node] = True |
| 56 | + for i in range(N): |
| 57 | + if not visited[i] and distance[i] > graph[node][i] + distance[node]: |
| 58 | + distance[i] = graph[node][i] + distance[node] |
| 59 | + |
| 60 | + return distance |
| 61 | + |
| 62 | +go_distance = dijkstra(reversed_graph,X,N) |
| 63 | +come_distance = dijkstra(graph,X,N) |
| 64 | + |
| 65 | +answer = -INF # 최장거리 구하기 |
| 66 | +for i in range(N): |
| 67 | + answer = max(answer,go_distance[i] + come_distance[i]) |
| 68 | +print(answer) |
0 commit comments