반응형
https://www.acmicpc.net/problem/18116
18116번: 로봇 조립
성규는 로봇을 조립해야 한다. 상자 안에는 여러 로봇의 부품들이 섞여 있다. 그런데 어떤 부품이 어느 로봇의 부품인지 표시가 되어있지 않다. 호재는 전자과라서 두 부품을 보면 같은 로봇의
www.acmicpc.net
[ 문제풀이 ]
1. 관계된 친구들의 수를 저장할 cnt 배열과 부모 노드를 저장할 vect 배열을 선언합니다.
2. cnt 배열을 모두 1로 초기화하고, vect[ i ] = i 로 초기화합니다.
3. Union-Find를 활용하여 친구들의 관계를 이어주고, 부모 노드의 cnt 배열의 값을 더해주고, 이를 출력합니다.
[ 소스코드 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include<iostream> using namespace std; int N; int vect[1000001]; int cnt[1000001]; int Find(int num) { if (vect[num] == num) return num; return vect[num] = Find(vect[num]); } void Union(int a, int b) { int pa = Find(a); int pb = Find(b); vect[pb] = pa; cnt[pa] += cnt[pb]; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N; for (int i = 1; i < 1000001; i++) { vect[i] = i; cnt[i] = 1; } for (int i = 0; i < N; i++) { char cmd; cin >> cmd; if (cmd == 'I') { int a, b; cin >> a >> b; if (Find(a) != Find(b)) { Union(a, b); } } else { int a; cin >> a; cout << cnt[Find(a)] << '\n'; } } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 17352번 - 여러분의 다리가 되어 드리겠습니다! (C++) (0) | 2023.05.29 |
---|---|
[ 백준 ] 12899번 - 데이터 구조 (C++) (0) | 2023.05.28 |
[ 백준 ] 11376번 - 열혈강호 2 (C++) (0) | 2023.05.26 |
[ 백준 ] 11375번 - 열혈강호 (C++) (0) | 2023.05.25 |
[ 백준 ] 2934번 - LRH 식물 (C++) (0) | 2023.05.23 |