import sys input = sys.stdin.readline N,M = map(int,input().split()) INF = float('inf') graph = [[0 if x == y else INF for y in range(N+1)] for x in range(N+1)] for _ in range(M): x,y,pay = map(int,input().split()) graph[x][y] = min(graph[x][y],pay) for mid in range(1,N+1): for end in range(1,N+1): for start in range(1,N+1): if graph[start][end] > graph[start][mid] + graph[mid][end]: graph[start][end] = graph[start][mid] + graph[mid][end] K = int(input()) friend_list = list(map(int,input().split())) min_value = INF min_list = [] for city in range(1,N+1): temp_max = 0 for p_num in friend_list: if graph[p_num][city] + graph[city][p_num] > temp_max: temp_max = graph[p_num][city] + graph[city][p_num] if temp_max < min_value: min_value = temp_max min_list = [city] elif temp_max == min_value: min_list.append(city) print(*min_list)
이 문제는 플로이드와샬을 이용해 모든 경로에 대해 이동비용을 먼저 계산을 해준다.
그리고 전체 도시들을 for문을 돌리면서, 친구들의 이동비용을 구하고,
각 친구들의 이동비용의 최대값의 최소가 되는 경우를 구해서 출력해주면 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 21942 부품 대여장 (0) | 2021.06.11 |
---|---|
[BOJ/백준] 21941 문자열 제거 (0) | 2021.06.11 |
[BOJ/백준] 21939 문제 추천 시스템 Version1 (0) | 2021.06.11 |
[BOJ/백준] 21938 영상처리 (0) | 2021.06.11 |
[BOJ/백준] 21937 작업 (0) | 2021.06.11 |