Cod sursa(job #2702250)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 3 februarie 2021 13:28:54
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define NMAX 100000

using namespace std;

int s[NMAX+1];

int find(int x)
{
    if (s[x] == x)
    {
        return x;
    }

    return s[x] = find(s[x]);
}

void unions(int x, int y)
{
    int sefi, sefj;
    sefi = find(x);
    sefj = find(y);
    s[sefj] = sefi;
}

int main()
{
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    int n, q, tip;
    fin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        s[i] = i;
    }
    for (int i = 0; i < q; i++)
    {
        int a, b;
        fin >> tip;
        if (tip == 1)
        {
            fin >> a >> b;
            unions(a, b);
        }
        else
        {
            fin >> a >> b;
            if (find(a) == find(b))
            {
                fout << "DA" << '\n';
            }
            else
            {
                fout << "NU" << '\n';
            }
        }
    }

    return 0;
}