반응형
https://www.acmicpc.net/problem/1976
🔶 풀이
유니온-파인드 문제.
1 → 3 으로 가려고할 때, 바로 연결되어있지 않아도 1 → 2 → 3 이 연결되어있다면 갈 수 있다.
즉, 가고자하는 경로가 쭉 이어져있으면 여행이 가능하다는 뜻이다.
유니온-파인드에 대해서 처음 접하신 분들은 아래 링크를 보고 오는 것을 추천한다.
유니온-파인드를 이용한 대표적인 알고리즘을 설명하고있다.
<최종코드>
import java.io.*;
import java.util.*;
public class Main {
static int parent[];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine());
parent = new int[N+1];
for (int i=1; i<=N; i++) {
parent[i] = i;
}
for (int i=1; i<=N; i++) {
st = new StringTokenizer(br.readLine());
for (int j=1; j<=N; j++) {
int tmp = Integer.parseInt(st.nextToken());
if (tmp == 1) {
union(i, j);
}
}
}
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
for (int i=1; i<M; i++) {
int tmp = Integer.parseInt(st.nextToken());
if (find(start) != find(tmp)) {
System.out.println("NO");
return;
}
}
System.out.println("YES");
}
public static int find(int x) {
if (parent[x] == x) {
return x;
}
return parent[x] = find(parent[x]);
}
public static void union(int a, int b) {
int A = find(a);
int B = find(b);
if (A != B) {
if (A > B) parent[A] = B;
else parent[B] = A;
}
}
}
반응형
'알고리즘 > 최소신장트리(MST) & 다익스트라' 카테고리의 다른 글
[자바로 푸는 백준] 1238번 파티 (0) | 2023.06.02 |
---|---|
[백준]JAVA - 4485번: 녹색 옷 입은 애가 젤다지? (0) | 2023.04.26 |
[백준]JAVA - 20926번: 얼음 미로 (0) | 2023.03.07 |
[백준]JAVA - 1504번: 특정한 최단 경로 (0) | 2022.12.08 |
[백준]JAVA - 1197번: 최소 스패닝 트리 (0) | 2022.11.07 |