Cod sursa(job #1144786)

Utilizator ade_tomi27Enache Adelina ade_tomi27 Data 17 martie 2014 16:50:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<stdio.h>
int tata[100003];
int find(int x)
{
    int r=x,aux;
    while(tata[r]!=r)
    {

        r=tata[r];
    }
    while(tata[x]!=x)
    {

        aux=tata[x];
        tata[x]=r;
        x=aux;
    }
    return r;
}
void unite(int x, int y)
{
    tata[x]=y;

}
int x,y,n,m,tip,i;
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;

    }
    for(i=1;i<=m;i++)
    {

        scanf("%d%d%d",&tip,&x,&y);
        if(tip==2)
        {

            if(find(x)==find(y))
                printf("DA\n");
            else printf("NU\n");

        }
        else
            unite(find(x),find(y));
    }
    return 0;
}