Cod sursa(job #1193415)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 31 mai 2014 18:18:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#define Nmax 100010

using namespace std;

int tip,x,y,n,m,i,t[Nmax],rang[Nmax];

inline int multime(int nod)
 {
     if (t[nod]!=nod)
       t[nod]=multime(t[nod]);
     return t[nod];
 }

void reuneste(int x,int y)
 {
     x=multime(x);
     y=multime(y);
     if (x==y) return;
     if (rang[x]<rang[y])
        t[x]=y;
     else t[y]=x;

     if (rang[x]==rang[y])
       ++rang[x];

 }


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

    scanf("%d %d", &n, &m);
    for (i=1;i<=n;++i) t[i]=i;
    for (i=1;i<=m;++i)
     {
         scanf("%d %d %d", &tip, &x, &y);
         if (tip==1)
               reuneste(x,y);
           else if (multime(x)==multime(y)) printf("DA\n");
                  else printf("NU\n");

     }

    return 0;
}