Cod sursa(job #286506)

Utilizator petrecgClinciu Glisca Petre petrecg Data 23 martie 2009 21:08:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
long parinte[100000],rg[100000],x,rez,m,n,c,y,i,q;
long first(int x)
{long rez,aux;
 rez=x;while(parinte[rez]!=rez)rez=parinte[rez];
 while(parinte[x]!=x)
  {aux=parinte[x];
   parinte[x]=rez;
   x=aux;
  }
 return rez;
}

void uneste(int x,int y)
{if(rg[x]>rg[y])parinte[y]=x;
	 else parinte[x]=y;
 if(rg[x]==rg[y])rg[y]++;
}

int main()
{freopen("disjoint.in","r",stdin);freopen("disjoint.out","w",stdout);
 scanf("%ld%ld",&n,&m);
 for(i=1;i<=n;i++){rg[i]=1;parinte[i]=i;}
 for(i=1;i<=m;i++)
  {scanf("%ld%ld%ld",&q,&x,&y);
   if(q==1)
    {uneste(first(x),first(y));
    }
    else if(first(x)==first(y))printf("DA\n");else printf("NU\n");
  }
 fclose(stdin);fclose(stdout);
 return 0;
}