본문 바로가기
카테고리 없음

[테스트케이스 추가] 백준 1238번: 파티 (python, 파이썬)

by 지기_ 2021. 7. 5.
반응형

1. 문제

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

 

1238번: 파티

첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어

www.acmicpc.net

 

 

2. 풀이

다익스트라.

단방향이기 때문에 갈 때와 올때의 길이 다르고 두 값을 더한 것의 최대값을 구해야한다.

 

3. 구현

import sys
import heapq
import math

# sys.stdin=open("input.txt")

N, X, T = map(int, sys.stdin.readline().split())

def dijk(start, end, gph):
  dist=[math.inf for _ in range(N+2)]
  edges=[]

  dist[start]=0
  heapq.heappush(edges,(dist[start],start))

  while edges:
    cost,pos = heapq.heappop(edges)
    for p,c in gph[pos]:
      c+=cost
      if dist[p]>c:
        dist[p]=c
        heapq.heappush(edges,(c,p))

  return dist[end]


gph=[[] for _ in range(N+2)]
gph_back=[[] for _ in range(N+2)]
while X:
  X-=1
  a,b,c = map(int, sys.stdin.readline().split())
  gph[a].append((b,c))
  gph_back[b].append((a,c))

m=0
for idx in range(N):
  m = max(m,dijk(idx+1,T,gph)+dijk(T,idx+1,gph))
print(m)

 

 

4. 추가 테스트케이스 

10 24 2
9 5 9 
7 9 2 
8 1 7 
7 10 2 
6 1 6 
10 6 5 
5 1 6 
5 7 9 
3 8 9 
4 10 7 
8 10 6 
7 2 6 
4 3 1 
10 9 9 
8 5 9 
2 1 4 
3 9 6 
1 2 4 
8 3 3 
1 8 4 
8 7 8 
6 8 5 
1 4 2 
2 3 4

답 29

 

7 21 4
1 2 7 
7 3 7 
6 5 1 
6 7 9 
3 6 9 
2 3 4 
3 5 8 
2 7 5 
4 1 3 
1 3 3 
6 2 8 
2 5 1 
4 3 1 
5 4 2 
5 1 1 
3 2 6 
6 3 3 
5 7 8 
2 6 6 
1 6 3 
3 1 9

답 28

반응형

댓글