Cod sursa(job #364567)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 16 noiembrie 2009 12:45:46
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
int tata[100005],grad[100005],n,m,tip,n1,n2,t1,t2;
int cautta (int nod)
{
    int ta;
    if(tata[nod]==nod)
        return nod;
    ta=cautta(tata[nod]);
    tata[nod]=ta;
    return ta;

}
int main ()
{
    int i;
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        grad[i]=1;
        tata[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&tip,&n1,&n2);
        t1=cautta(n1);
        t2=cautta(n2);
        if(tip==2)
        {
            if(t1==t2)
                printf("DA\n");
            else
                printf("NU\n");
            continue;
        }

        if(grad[t1]<grad[t2])
            tata[n1]=n2;
        else
        if(grad[t2]<grad[t1])
            tata[n2]=n1;
        else
        {
            tata[t1]=t2;
            ++grad[t1];
        }
    }
        
    return 0;
}