Cod sursa(job #1097663)

Utilizator raulmuresanRaul Muresan raulmuresan Data 3 februarie 2014 19:29:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <algorithm>

using namespace std;
int i,aux,n,k,j,p,tata[101009],m,st,s,stmax,drmax,smax,nr,sol,x,y,caz;
int max(int a,int b)
{
    if(a>b)
    {
        return a;
    }
    return b;
}
void init()
{
    for(i=1;i<=n;i++)
    {
        tata[i]=i;
    }
}
int parinte(int p)
{
    if(tata[p]==p) return p;
    tata[p]=parinte(tata[p]);
    return tata[p];
}


void unite(int a,int b)
{
    tata[parinte(a)]=parinte(b);
}

int main()
{
    freopen ("disjoint.in","r",stdin);
    freopen ("disjoint.out","w",stdout);

    scanf("%d%d",&n,&m);
    init();
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&caz,&x,&y);
        if(caz==1)//se cere reuniunea multimilor
        {
           unite(x,y);
        }
        else//stabilim daca nodurile fac parte din aceeasi componenta conexa
        {
            if(parinte(x)==parinte(y))
            {
                printf("DA\n");
            }
            else
            {
                 printf("NU\n");
            }
        }
    }
}