1238번: 파티
첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어
www.acmicpc.net
package 백준.자바.파티_1238;
import java.io.*;
import java.util.*;
public class Main {
public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken())-1;
int[][] arr = new int[N][N];
// 각 노드 최댓값으로 초기화
for(int i = 0; i < N; i++){
Arrays.fill(arr[i], 1_000_000_000);
arr[i][i] = 0;
}
// 입력 받기
for(int i = 0; i < M; i++){
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken())-1;
int b = Integer.parseInt(st.nextToken())-1;
arr[a][b] = Integer.parseInt(st.nextToken());
}
// 플로이드 워셜 알고리즘 수행
for(int i = 0; i < N; i++){
for(int a = 0; a < N; a++){
for(int b = 0; b < N; b++)
arr[a][b] = Math.min(arr[a][b], arr[a][i]+arr[i][b]);
}
}
int max = 0;
for(int i = 0; i < N; i++)
max = Math.max(arr[i][X] + arr[X][i], max);
System.out.println(max);
br.close();
}
public static void main(String[] args) throws Exception{
new Main().solution();
}
}
'문제풀이 > 백준' 카테고리의 다른 글
파이프 옮기기 1 17070 Java (1) | 2024.01.27 |
---|---|
피리부는사나이 16724 Java (1) | 2024.01.27 |
A와B 12904 Java (0) | 2024.01.25 |
기타레슨 2343 Java (0) | 2024.01.25 |
탈출 3055 Java (0) | 2024.01.22 |