Cod sursa(job #2662205)

Utilizator radu16012003Radu Dumitrache radu16012003 Data 23 octombrie 2020 17:53:51
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m;
struct nod
{
    int info;
    nod* tata;
} * t[100001];
int radacina(nod*  x)
{
    while (x->tata!=NULL)
        x=x->tata;
    return x->info;

}
void unire(nod *& a,nod*& b)
{
    if (a->info>b->info)
    {
       int rad=radacina(a);
        t[rad]->tata=b;
    }
    else
    {
       int rad=radacina(b);
        t[rad]->tata=a;
    }

}
int main()
{
    fin>>n>>m;
    int x,y,op;
    for (int i=1;i<=n;i++)
    {
        t[i]=new nod();
        t[i]->info=i;
        t[i]->tata=NULL;
    }
    for (int i=1;i<=m;i++)
    {
        fin>>op;
        fin>>x>>y;
        if (op==1)
        {
            unire(t[x],t[y]);
        }
        else
        {
            if (radacina(t[x])==radacina(t[y]))
                fout<<"DA\n";
            else
                fout<<"NU\n";

        }
    }
    return 0;
}