Cod sursa(job #2704404)

Utilizator Snake2003lalallalal Snake2003 Data 10 februarie 2021 15:15:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>

#define Nmax 100005

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int a, b, caz, x, y;

int Tata[Nmax], Dimensiune[Nmax];

inline int Find(int x)
{
    if(x != Tata[x])
        Tata[x] = Find(Tata[x]);
    return Tata[x];
}
void Unire(int x, int y)
{
    x = Find(x);
    y = Find(y);

    if(Dimensiune[x] < Dimensiune[y])
    {
        Dimensiune[y] += Dimensiune[x];
        Tata[x] = y;
    }
    else
    {
        Dimensiune[x] += Dimensiune[y];
        Tata[y] = x;
    }

}

int main()
{
    fin >> a >> b;

    for(int i = 1; i <= b; ++ i)
    {
        Tata[i] = i;
        Dimensiune[i] = 1;
    }

    for(int i = 1; i <= b; ++ i)
    {
        fin >> caz >> x >> y;
        if(caz == 1)
        {
            int tata_x = Find(x);
            int tata_y = Find(y);

            if(tata_x != tata_y)
            {
                Unire(x, y);
            }
        }
        else
        {
            int tata_x = Find(x);
            int tata_y = Find(y);

            if(tata_x == tata_y)
                fout << "DA" << "\n";
            else
                fout << "NU" << "\n";
        }
    }

    return 0;
}