Cod sursa(job #1914438)

Utilizator ana-maria.simiAna-Maria Simionescu ana-maria.simi Data 8 martie 2017 16:59:09
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
using namespace std;
int nod,tata[100001],h[100001],r1,r2,n,m,i,t,x,y;
int radacina(int x)
{
    nod=x;
    while(tata[x]!=x)
        x=tata[x];
    return tata[x];
}

void unit(int x, int y)
{
    if(h[r1]>h[r2])
        tata[r2]=r1;
        else
            tata[r1]=tata[r2];
    if(h[r1]==h[r2])
        h[r1]++;
}


int main()
{freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++)
   {tata[i]=i;
    h[i]=1;}
for(i=1; i<=m; i++)
{
   scanf("%d%d%d", &t, &x, &y);
    if(t==1)
    {
        r1=radacina(x);
        r2=radacina(y);
        unit(r1,r2);
    }
    else
        {r1=radacina(x);
        r2=radacina(y);
        if(r1==r2)
            printf("DA\n");
            else
                printf("NU\n");}
}


    return 0;
}