๋ฌธ์
์ฝ๋
#include <iostream>
#define MAX 100001
using namespace std;
int N, M, ans;
int parent[MAX];
int find_parent(int a){
if(a == parent[a]) return a;
return parent[a] = find_parent(parent[a]);
}
void make_parent(int a, int b){
a = find_parent(a);
b = find_parent(b);
if(a<b) parent[b] = a;
else parent[a] = b;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M;
for(int i=0; i<MAX; i++) parent[i] = i;
for(int i=0; i<M; i++){
int a, b; cin>>a>>b;
if(find_parent(a) != find_parent(b)){
make_parent(a,b);
}
else ans++; // ๋ถ๋ชจ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ(์ฌ์ดํด์ด ์๊น) - ๋ผ์ด๋ด์ผ ํ๋ค.
}
for(int i=1; i<=N; i++){ // ๋ถ๋ชจ๊ฐ ์๊ธฐ ์์ ์ธ ๊ฒฝ์ฐ - ํ๋๋ก ํฉ์ณ์ผ ํ๋ค.
if(i == find_parent(i)) ans++;
}
cout<<ans-1; // ๋ฐ๋ก ์์์ ๋ฃจํธ ๋
ธ๋๋ ํฉ์น๊ฒฝ์ฐ๋ฅผ ๋นผ์ค๋ค.
}
ํ์ด
์ ๋์จ ํ์ธ๋๋ก ํ์ด๊ฐ ๊ฐ๋ฅํ ๋ฌธ์ ์์ต๋๋ค.
- ์ด๊ธฐ์ ๋ชจ๋ ๋ ธ๋์ ๋ถ๋ชจ๋ ์๊ธฐ ์์ ์ผ๋ก ์ธํ ํฉ๋๋ค.
- ์ ๋ ฅ์ ๋ฐ์ ๋ ๋ ๋ ธ๋๊ฐ ๊ฐ์ ๋ถ๋ชจ๊ฐ ์๋๋ผ๋ฉด ์ ๋์จ ํ์ธ๋๋ฅผ ํตํด ๋ถ๋ชจ๋ฅผ ํฉ์ณ์ฃผ๊ณ , ๋ถ๋ชจ๊ฐ ๊ฐ๋ค๋ฉด ๋ผ์ด๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์๋ฅผ ์ฆ๊ฐํด์ค๋๋ค.
- ๊ทธ ํ, ๋ถ๋ชจ๊ฐ ์๊ธฐ ์์ ์ธ ๊ฒฝ์ฐ ํ๋์ ํธ๋ฆฌ๋ก ํฉ์ณ์ผ ํ๋ ์ด๋ ๊ณผ์ ์ด ํ์ํ๊ธฐ์ ํ์๋ฅผ ์ฆ๊ฐํฉ๋๋ค.
5 4
1 2
1 3
2 3
4 5
์ ์ ๋ ฅ์ ํ์ดํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
ํ์ฌ parent[1] = 1, parent[2] = 2 ์ด๋ฏ๋ก ๋ถ๋ชจ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํฉ์น๋ ๊ณผ์ ์ ํตํด parent[1]= 1, parent[2] = 1๋ก ๋ง๋ค์ด์ค๋๋ค.
๋ค์์ผ๋ก parent[1] = 1, parent[3] = 3, ์ญ์ ๋ถ๋ชจ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํฉ์น๋ ๊ณผ์ ์ ํตํด parent[1] = 1, parent[3] = 1๋ก ๋ง๋ค์ด์ค๋๋ค.
๋ค์์ผ๋ก parent[2] = 1, parent[3] = 1 ์ด๋ฏ๋ก ๋ ๋ค ๋ถ๋ชจ๊ฐ ๊ฐ์ผ๋ ์ฌ์ดํด์ด ์๊น๋๋ค. ๋ฐ๋ผ์ ๋ผ์ด๋ด๋ ์์ ์ ์ํํด์ผ ํ๋ฏ๋ก ํ์๋ฅผ 1 ์ฆ๊ฐ์์ผ์ค๋๋ค.
parent[4] = 4, parent[5] = 5, ๋ ๋ค ๋ถ๋ชจ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํฉ์น๋ ๊ณผ์ ์ ํตํด parent[4] = 4, parent[5] = 5๋ก ๋ง๋ค์ด์ค๋๋ค.
์ด์ ์ ๋ ฅ์ด ์ ๋ถ ๋๋๋ฉด ํธ๋ฆฌ๋ฅผ ํ๋๋ก ํฉ์ณ์ฃผ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
ํ์ฌ ์ ์ํฉ์์ node4๋ฅผ node1 ์ ๋ ธ๋ ์ชฝ์ผ๋ก ๋ถ์ฌ์ฃผ๋ฉด ํ๋์ ๋ ธ๋๊ฐ ๋๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ node = parent[node]์ธ ๊ฒฝ์ฐ๋ ์ ๋ถ ๋ถ์ฌ์ค๋ค๊ณ ์๊ฐํ๊ณ ํ์๋ฅผ ์ฆ๊ฐ์์ผ ์ฃผ๋ฉด ๋ฉ๋๋ค.
์๋๋ ์ถ๊ฐ์ ์ธ ํ ์คํธ ์ผ์ด์ค์ ๋๋ค.
3 2
1 2
2 3
-> 0
8 7
1 3
1 2
2 4
3 4
5 6
5 7
6 7
-> 4
5 6
1 2
1 3
1 4
2 5
3 5
4 5
->2
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 16234๋ฒ - ์ธ๊ตฌ ์ด๋ (0) | 2022.08.25 |
---|---|
[๋ฐฑ์ค,c++] 17135๋ฒ - ์บ์ฌ๋ํ์ค (2) | 2022.08.25 |
[๋ฐฑ์ค,c++] 14503๋ฒ - ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2022.08.24 |
[๋ฐฑ์ค,c++] 18429๋ฒ - ๊ทผ์์ค (0) | 2022.08.23 |
[๋ฐฑ์ค,c++] 15658๋ฒ - ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (2) (0) | 2022.08.23 |
[๋ฐฑ์ค,c++] 6443๋ฒ - ์ ๋๊ทธ๋จ (0) | 2022.08.21 |
๋๊ธ