Cod sursa(job #1046141)

Utilizator CatalinaRaduCatalina Elena Radu CatalinaRadu Data 2 decembrie 2013 18:20:08
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#include <iostream>
#define Nmax 100020

using namespace std;

int Arb[Nmax],Rang[Nmax];

int cautare (int x)
{
    int i,aux;
    for(i=x;Arb[i]!=i;i=Arb[i]);

    for (;Arb[x]!=x;)
    {
        aux=Arb[x];
        Arb[x]=i;
        i=aux;
    }

    return i;
}

void unire (int x, int y)
{
    if (Rang[x]>Rang[y])
        Arb[y]=x;
    else
        Arb[x]=y;
    if(Rang[x]==Rang[y])
        Rang[y]++;
}
int main()
{

    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int n,m;
    scanf("%d %d",&n,&m);
    int i,x,y,cod;

    for (i=1;i<=n;i++)
    {
        Arb[i]=i;
        Rang[i]=1;
    }
    for (i=1;i<=m;i++)
    {
        scanf("%d %d %d",&cod,&x,&y);
        if(cod==2)
        {
            if (cautare(x)==cautare(y))
                printf("DA\n");
            else printf("NU\n");
        }
        else

            {
           if (cautare(x)==cautare(y))
            {
                fprintf(stderr,"%d",i);
                return 0;
                }
            unire(cautare(x),cautare(y));
        }
    }
    return 0;
}