Skip to content

Commit 4c97e19

Browse files
authored
[BOJ] 1238 파티 (G3)
1 parent 146c9db commit 4c97e19

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

김지호/6주차/260207.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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

Comments
 (0)