https://www.acmicpc.net/problem/1976
여행 가자... 입니다. 결국 그 경로들이 이어져 있으면 되는 문제라 BFS를 처음에 떠올렸다. 근데 빠르게 플로이드 와샬로 풀었다. 제출하고 다른 사람들 코드 보니까 Union-Find 로도 많이 풀었다. 다시 여러방법으로 해봐도 좋을 문제일듯!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int N, M;
public static int[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());
StringTokenizer st;
map = new int[N + 1][N + 1];
for (int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 1; j <= N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
if (i == j) {
map[i][j] = 1; continue;
}
if (map[i][j] == 0) {
map[i][j] = Integer.MAX_VALUE;
}
}
}
for (int n = 1; n <= N; n++) {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (map[i][n] == Integer.MAX_VALUE || map[n][j] == Integer.MAX_VALUE) continue;
if (map[i][j] > map[i][n] + map[n][j])
map[i][j] = map[i][n] + map[n][j];
}
}
}
String[] path = br.readLine().split(" ");
for(int i = 0; i < M - 1; i++) {
int startCity = Integer.parseInt(path[i]);
int endCity = Integer.parseInt(path[i + 1]);
if (map[startCity][endCity] == Integer.MAX_VALUE) {
System.out.println("NO");
return;
}
}
System.out.println("YES");
}
}
'기타' 카테고리의 다른 글
[혼공컴운] 6주차_미션 (0) | 2024.02.18 |
---|---|
모각코_5회차 (0) | 2024.02.15 |
모각코_4회차 (1) | 2024.02.14 |
[혼공컴운] 5주차_미션 (0) | 2024.02.04 |
[혼공컴운] 4주차_미션 (0) | 2024.01.28 |