๋ฐฐ์ ๋ Union-Find๋ฅผ ๋ณต์ตํ๊ธฐ ์ํด ํ์ด๋ดค์ต๋๋ค.
๋๋น๋ ์ ํ๋ฒ ๋์ด ๊ตฌํํ ํจ์๋ฅผ ์ต๋ํ ์ด์ฉํด๋ณด๋ ค๊ณ ํ์ต๋๋ค.
3๊ฐ ํจ์(getParent, unionParent, findParent) ๋ชจ๋ ์ด์ฉํ๊ณ ์ธ์์ ๋ถ๋ชจ ๋ ธ๋ ๋ฐฐ์ด์ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๋ ์๊ฐ์ด๊ณผ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์๊ฐ์ด๊ณผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด 1) ํจ์ ํ๋๋ฅผ ์ค์ด๊ณ 2) ์ธ์๋ฅผ ํตํด ๋ถ๋ชจ ๋ ธ๋ ๋ฐฐ์ด์ ์ ๋ฌํ๋ ๋์ ์ ์ญ๋ณ์๋ก ์ค์ ํ๋ ํต๊ณผํ์ต๋๋ค. (getParent, unionParent ์ฌ์ฉ)
์๊ฐ ์ด๊ณผ ๋๋ ์ฝ๋
#include <iostream>
using namespace std;
int n, m;
int getParent(int parent[], int x) {
if(parent[x] == x) return x;
return parent[x] = getParent(parent, parent[x]);
}
void unionParent(int parent[], int a, int b) {
a = getParent(parent, a);
b = getParent(parent, b);
if(a < b) parent[b] = a;
else parent[a] = b;
}
int findParent(int parent[], int a, int b) {
a = getParent(parent, a);
b = getParent(parent, b);
if(a==b) return 1;
return 0;
}
int main(void) {
int parent[1000001];
cin >> n >> m;
for(int i = 0; i <= n; i++) parent[i] = i;
for(int i = 0; i < m; i++) {
int op, a, b;
cin >> op >> a >> b;
if(op == 0) {
unionParent(parent, a, b);
} else {
if(findParent(parent, a, b) == 1) cout << "YES\n";
else cout << "NO\n";
}
}
return 0;
}
ํต๊ณผํ ์ฝ๋
#include <iostream>
using namespace std;
int parent[1000001];
int n, m;
int getParent(int x) {
if(parent[x] == x) return x;
return parent[x] = getParent(parent[x]);
}
void unionParent(int a, int b) {
a = getParent(a);
b = getParent(b);
if(a < b) parent[b] = a;
else parent[a] = b;
}
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n >> m;
for(int i = 0; i <= n; i++) parent[i] = i;
for(int i = 0; i < m; i++) {
int op, a, b;
cin >> op >> a >> b;
if(op == 0) {
unionParent(a, b);
} else {
if(getParent(a) == getParent(b)) cout << "YES\n";
else cout << "NO\n";
}
}
return 0;
}
Reference
https://www.acmicpc.net/problem/1717
1717๋ฒ: ์งํฉ์ ํํ
์ฒซ์งธ ์ค์ n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. m์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์ฐ์ฐ์ ๊ฐ์์ด๋ค. ๋ค์ m๊ฐ์ ์ค์๋ ๊ฐ๊ฐ์ ์ฐ์ฐ์ด ์ฃผ์ด์ง๋ค. ํฉ์งํฉ์ 0 a b์ ํํ๋ก ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ค. ์ด๋
www.acmicpc.net
'Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ1238_ํํฐ (C++) (0) | 2022.09.21 |
---|---|
BOJ13549_์จ๋ฐ๊ผญ์ง3 (0) | 2022.09.21 |
Union-Find (ํฉ์งํฉ ์ฐพ๊ธฐ) (0) | 2022.07.22 |
2022 ์๋ฐ๊ธฐ ์ผ์ฑSDS ์ฝ๋ฉํ ์คํธ ํ๊ธฐ (0) | 2022.07.22 |
<C/C++> BOJ 15683 ๊ฐ์ (0) | 2022.05.06 |