๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1976)
< ์ฌํ ๊ฐ์ >
๋ฌธ์ ํ์ด
Union-Find ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๊ฐ์ ์งํฉ์ธ์ง ํ์ธํด์ ์ฌํ์ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class _1976_ { // ์ฌํ ๊ฐ์
static int arr[];
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
int m = Integer.parseInt(bf.readLine());
arr = new int[n + 1];
for(int i=0; i<n+1; i++) {
arr[i]=i;
}
for (int i = 0; i < n; i++) {
st = new StringTokenizer(bf.readLine());
for (int j = 0; j < n; j++) {
int x = Integer.parseInt(st.nextToken());
if (x == 1) {
int a = find(i + 1);
int b = find(j + 1);
if (a > b)
arr[a] = b;
else
arr[b] = a;
}
}
}
st = new StringTokenizer(bf.readLine());
int result = find(Integer.parseInt(st.nextToken()));
boolean flag = false;
for (int i = 1; i < m; i++) {
int num = find(Integer.parseInt(st.nextToken()));
if (result != num) {
flag = true;
break;
}
}
if (!flag) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
private static int find(int i) {
if (arr[i] == i)
return i;
return arr[i] = find(arr[i]);
}
}
Main
๋ณ์)
n : ๋์์ ์
m : ์ฌํ ๊ณํ์ ์ํ ๋์์ ์
arr : ์งํฉ
result : ์ฌํ ๊ณํ์ ์ํ ์ฒซ ๋ฒ์งธ ๋์์ ์งํฉ ๋ฒํธ
flag : ๊ฐ๋ฅ ์ฌ๋ถ
- ๋์์ ์(n), ์ฌํ ๊ณํ์ ์ํ ๋์์ ์(m) ์ ๋ ฅ
- ์งํฉ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ฐฐ์ด์ index ๋ฒํธ์ ๋์ผํ๊ฒ ์ด๊ธฐํ
- ๋์์ ์ฐ๊ฒฐ ์ ๋ณด ์ ๋ ฅ
: 1์ด๋ฉด ์ฐ๊ฒฐ๋ ๊ฒ์ด๋ฏ๋ก ๊ฐ์ ์งํฉ์์ ํ์
- ์ฌํ ๊ณํ์ ์ํ ๋์ ์ค์์ ์ฒซ ๋ฒ์งธ ๋์์ ์งํฉ์(result) ๋จผ์ ๊ตฌํจ
- ์ฌํ ๊ณํ์ ์ํ ๋์ ํ์
: ์์์ ๊ตฌํ ์งํฉ๊ณผ ๋๋จธ์ง ์ฌํ ๊ณํ์ ์ํ ๋์์ ์งํฉ์ด ๋ค๋ฅด๋ฉด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ์ค์ง
- flag ์ฌ๋ถ์ ๋ฐ๋ผ ์ ๋ต ์ถ๋ ฅ
find
- arr[i]์ i๊ฐ ๊ฐ๋ค๋ฉด ๋ถ๋ชจ ๋ ธ๋ ์ด๋ฏ๋ก i ๋ฐํ
- arr[i]์ i๊ฐ ๊ฐ์ง ์๋ค๋ฉด ๋ถ๋ชจ ๋ ธ๋๊ฐ ์๋๋ฏ๋ก ๋ค์ find๋ฅผ ํธ์ถํ๋ฉฐ ๋์ค์ ๊ฐ์ ์ผ์ ๋ฐ๋ณตํ์ง ์๋๋ก ๊ฐ update
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1439_๋ค์ง๊ธฐ (0) | 2023.09.13 |
---|---|
[Baekjoon] 1343_ํด๋ฆฌ์ค๋ฏธ๋ ธ (0) | 2023.09.11 |
[Baekjoon] 23843_์ฝ์ผํธ (0) | 2023.08.31 |
[Baekjoon] 25381_ABBC (0) | 2023.08.30 |
[Baekjoon] 25497_๊ธฐ์ ์ฐ๊ณ๋ง์คํฐ ์์ค (0) | 2023.08.29 |