Cod sursa(job #641618)

Utilizator AnaTudorTudor Ana Maria Mihaela AnaTudor Data 28 noiembrie 2011 22:58:16
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<stdio.h>
#define Max 100005
using namespace std;
int tata[Max],niv[Max],nr_elem,nr_operatii,operatie,x,y,radx,rady;

int radacina (int nod)
{
     int aux,c=0,rad;
     aux=nod;
     while(aux!=tata[aux])
     {
          aux=tata[aux];
          c++;
     }
     rad=aux;
     aux=x;
      while(aux!=tata[aux])
      {
           niv[aux]=c;
           tata[aux]=rad;
           aux=tata[aux];   }
      return rad;
}
void unire(int x,int y)
{
     if (niv[x]>=niv[y])
       tata[rady]=radx;
       else
         tata[radx]=rady;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&nr_elem,&nr_operatii);
for (int i=0;i<=nr_elem;++i)
 tata[i]=i;

  for(int i=1;i<=nr_operatii;++i)
   { scanf("%d%d%d",&operatie,&x,&y);
      radx=radacina(x);
      rady=radacina(y);
       if (operatie==1)
        unire(x,y);
        else
          if (radx==rady)
            printf("DA\n");
            else
            printf("NU\n");
   }
   return 0;
}