Cod sursa(job #2709187)

Utilizator codruta.miron08Miron Ioana Codruta codruta.miron08 Data 19 februarie 2021 21:46:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100005;

int n,m,op,x,y;
int tata[NMAX], rang[NMAX];

int Find(int nod)
{
    while(tata[nod] != nod)
        nod = tata[nod];
    return nod;
}
void Unite(int nod1,int nod2)
{
    if(rang[nod1] < rang[nod2])
        tata[nod1] = nod2;
    if(rang[nod1] > rang[nod2])
        tata[nod2] = nod1;
    if(rang[nod1] == rang[nod2])
    {
        tata[nod1] = nod2;
        rang[nod2]++;
    }
}
void read()
{
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        tata[i] = i;
        rang[i] = 1;
    }
    for(int i = 1; i <= m; i++)
    {
        fin >> op >> x >>y;
        if(op == 1)
        {
            Unite(Find(x),Find(y));
        }
        else
        {
            if(Find(x) == Find(y))
                fout << "DA" << "\n";
            else
                fout << "NU" << "\n";
        }
    }

}
int main()
{
    read();

    return 0;
}