์งํฉ์ ํํ - ์ ๋์จ ํ์ธ๋ (Lv. Gold5)
1. ๋ฌธ์
2. ํ์ด
1. ๋ฌธ์
https://www.acmicpc.net/problem/1717
2. ํ์ด
import java.util.*;
import java.io.*;
class Main {
static int[] par;
public static int _find(int A) {
if (par[A] == A) return A;
return par[A] = _find(par[A]);
}
public static void _union(int A, int B) {
int rootA = _find(A);
int rootB = _find(B);
if (rootA != rootB) {
par[rootB] = rootA;
}
}
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
par = new int[N + 1];
for (int i = 0; i <= N; i++) {
par[i] = i;
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int X = Integer.parseInt(st.nextToken());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
if (X == 0) {
_union(A, B);
} else {
if (_find(A) == _find(B)) {
sb.append("YES\n");
} else {
sb.append("NO\n");
}
}
}
System.out.print(sb);
}
}
- ์ ๋์จ ํ์ธ๋(Union Find) ์๊ณ ๋ฆฌ์ฆ
์งํฉ์ ๊ด๋ฆฌํ๊ณ ๋ ์์๊ฐ ๊ฐ์ ์งํฉ์ ์๋์ง ํ๋ณํ๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ์์ ๋๋ค.
1. _union ํจ์์์ A์ B๊ฐ ์ํ ์งํฉ์ ํฉ์นจ
public static void _union(int A, int B) {
int rootA = _find(A);
int rootB = _find(B);
if (rootA != rootB) {
par[rootB] = rootA;
}
}
A์ B์ ๋ถ๋ชจ๋ฅผ ์ฐพ๊ณ , ๋ถ๋ชจ๊ฐ ๊ฐ์ง ์์ผ๋ฉด B์ ๋ถ๋ชจ๋ฅผ A๋ก ์ค์ ํฉ๋๋ค.
2. _find ํจ์์์ A๊ฐ ์ํ ์งํฉ์ ์ฐพ๊ธฐ
public static int _find(int A) {
if (par[A] == A) return A;
return par[A] = _find(par[A]);
}
์ฒ์์ par ๋ฐฐ์ด์ ๋ชจ๋ ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค๋๋ก ์ด๊ธฐํ ํ์ต๋๋ค. ๋ง์ฝ A๊ฐ ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค๋ฉด ์์ ์ด ์ต์์ ๋ฃจํธ์ธ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ A๋ฅผ ๋ฐํํด์ฃผ๊ณ , A๊ฐ ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค์ง ์์ผ๋ฉด ์ต์์ ๋ฃจํธ๋ฅผ ์ฐพ๊ธฐ ์ํด find๋ฅผ ํด์ค๋๋ค. ์ด๋ _find(par[A])๋ง ์ฌ์ฉํ์ง ์๊ณ , par[A] = _find(par[A]); ๋ฅผ ํด์ค์ผ๋ก์จ ๊ฒฝ๋ก๋ฅผ ์์ถํ์ฌ ํธ๋ฆฌ ๋์ด๊ฐ ์ค์ด๋ค์ด ์๊ฐ ๋ณต์ก๋๊ฐ ๋ฎ์์ง๋๋ค.
๋ฌธ์ ๊ฐ ์์ผ๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ !
ํผ๋๋ฐฑ์ ์ธ์ ๋ ํ์์ ๋๋ค <3
'๐ก Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] DFS์ BFS (Lv. Sliver2) (0) | 2025.02.19 |
---|---|
[Huffman] ํํ๋ง ์๊ณ ๋ฆฌ์ฆ (0) | 2025.02.14 |
[Graph] ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ (0) | 2025.02.13 |
[Graph] ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ (feat. ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ) (0) | 2025.02.13 |
[Java] ์ต๋จ๊ฒฝ๋ก - ๋ค์ต์คํธ๋ผ (Lv. Gold4) (0) | 2025.02.13 |