Cod sursa(job #2323310)

Utilizator vlad6001Pintilie Vlad vlad6001 Data 19 ianuarie 2019 09:29:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int noduri, operatii, tata[100004], urm, operatie, x, y, poz;

int radacina(int x)
{
    poz = x;
    while(tata[x] != 0)
    x = tata[x];
    while(tata[poz] != 0)
    {
        urm = tata[poz];
        tata[poz] = x;
        poz = urm;
    }

    return x;
}

void uneste(int x, int y)
{
    y = radacina(y);
    while(tata[x] != 0)
    {
        urm = tata[x];
        tata[x] = y;
        x = urm;
    }
    tata[x] = y;
}

int main()
{
    cin >> noduri >> operatii;
    for(int yy=1; yy <= operatii; yy++)
    {
        cin >> operatie >> x >> y;
        if(operatie == 1)
        uneste(x,y);
        else
        {
            if(radacina(x) == radacina(y))
            cout << "DA\n";
            else
            cout << "NU\n";
        }
    }
}