Cod sursa(job #2525964)

Utilizator serbandonceanSerban Doncean serbandoncean Data 18 ianuarie 2020 09:46:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#define DMAX 100002
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tata[DMAX],h[DMAX],n;
int Find(int x);
int nr,x,y,op;
void Union(int x,int y);
int main()
{
fin>>n>>op;
while(op--)
{
    fin>>nr>>x>>y;
    if(nr==1)
        Union(x,y);
    else
        if(Find(x)==Find(y))
            fout<<"DA\n";
                     else
                        fout<<"NU\n";

}
    return 0;
}
int Find(int x)
{int rad=x,aux;
    while(tata[rad])
        rad=tata[rad];
    while(tata[x])
    {
        aux=tata[x];
        tata[x]=rad;
        x=aux;
    }
    return rad;
}
void Union(int x,int y)
{
    x=Find(x);
    y=Find(y);

    if(h[x]>h[y])
        tata[y]=x;
    else
    {if(h[x]==h[y])
        h[y]++;
        tata[x]=y;
    }
}