Cod sursa(job #355330)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 10 octombrie 2009 19:10:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
#define Nmx 100001

int T[Nmx],R[Nmx];
int n,m;

int find(int x)
{
    int Q=x,y;
    while(T[Q]!=Q)
        Q=T[Q];
    while(T[x]!=x)
    {
        y=T[x];
        T[x]=Q;
        x=y;
    }
    return Q;
}

void add(int x,int y)
{
    if(R[x]>R[y])
        T[y]=x;
    else T[x]=y;
    if(R[x]==R[y])
        R[y]++;
}

void citire()
{
    scanf("%d%d",&n,&m);
    int q,x,y;
    for(int i=1;i<=n;++i)
        {
            T[i]=i;
            R[i]=1;
        }
    for(int i=1;i<=m;++i)
        {
            scanf("%d%d%d",&q,&x,&y);
            if(q==2)
            {
                if(find(x)==find(y))
                  printf("DA\n");
                 else printf("NU\n");
            }
            else add(find(x),find(y));
        }
}

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