Notice
Recent Posts
Recent Comments
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 18116 로봇 조립 본문

Programming/BOJ

[백준/BOJ] 18116 로봇 조립

he1fire 2020. 10. 9. 01:07
728x90

문제 : 18116 로봇 조립

 

18116번: 로봇 조립

성규는 로봇을 조립해야 한다. 상자 안에는 여러 로봇의 부품들이 섞여 있다. 그런데 어떤 부품이 어느 로봇의 부품인지 표시가 되어있지 않다. 호재는 전자과라서 두 부품을 보면 같은 로봇의 �

www.acmicpc.net

서로 다른 부품이 2개가 주어지고 두 부품이

같은 로봇의 부품이란 것을 알려줄 때, 어떤 로봇의

현재까지 알아낸 부품 개수를 출력하면 되는 문제이다.

UnionFind를 사용해 각 부품의 집합을 합쳐주고,

집합을 합칠 때 집합의 크기도 따로 저장해 합쳐주면 된다.


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N, arr[1000005], cnt[1000005];
ll Find(ll x){
    if (x==arr[x])
        return x;
    return arr[x]=Find(arr[x]);
}
void Union(ll x, ll y){
    if (Find(x)!=Find(y)){
        cnt[Find(y)]+=cnt[Find(x)];
        cnt[Find(x)]=0;
        arr[Find(x)]=Find(y);
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N;
    for (int i=0;i<1000005;i++){
        arr[i]=i;
        cnt[i]=1;
    }
    while (N--){
        char C;
        ll a, b;
        cin >> C;
        if (C=='I'){
            cin >> a >> b;
            Union(a,b);
        }
        else{
            cin >> a;
            cout << cnt[Find(a)] << "\n";
        }
    }
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 4781 사탕 가게  (0) 2020.11.12
[백준/BOJ] 2110 공유기 설치  (0) 2020.10.12
[백준/BOJ] 13140 Hello World!  (0) 2020.10.07
[백준/BOJ] 1162 도로포장  (0) 2020.10.02
[백준/BOJ] 1446 지름길  (0) 2020.09.30
Comments