백준 2606번 Union-Find 풀이




#include <iostream>
using namespace std;

int parent[110];

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;
}

bool findParent(int a, int b)
{
    a = getParent(a);
    b = getParent(b);

    if (a == b)
        return true;
    return false;
}

int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int computer;
    cin >> computer;
    for (int i = 1; i <= computer; i++)
    {
        parent[i] = i;
    }

    int a, b, group;
    cin >> group;

    for (int i = 0; i < group; i++)
    {
        cin >> a >> b;
        unionParent(a, b);
    }

    int result = 0;
    for (int i = 2; i <= computer; i++)
    {
        if (findParent(parent[i], 1))
            result++;
    }

    cout << result << "\n";

    return 0;
}