Cod sursa(job #2943208)

Utilizator NicuDirvaDirva Nicolae NicuDirva Data 20 noiembrie 2022 18:43:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;

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

int n, m, tata[100005];

//Cautam tatal unui nod
int op2(int nod)
{
    if(tata[nod] == nod)
        return nod;

    tata[nod] = op2(tata[nod]);

    return tata[nod];
}

//Reuniunea a 2 mulimi
void op1(int nod1, int nod2) {
    int r1 = op2(nod1);
    int r2 = op2(nod2);
    tata[r2] = r1;
}

int main()
{
    fin>>n>>m;

    for(int i=1; i<=n; i++)
        tata[i] = i;

    for(int i=0;i<m;i++)
    {
        int op, x, y;
        fin>>op>>x>>y;
        if(op==1)
            op1(x, y);
        else
        {
            if(op2(x) == op2(y))
                fout<<"DA"<<"\n";
            else
                fout<<"NU"<<"\n";
        }
    }

    fin.close();
    fout.close();

    //Complexitatea O(nm)
    return 0;
}