Cod sursa(job #286505)

Utilizator petrecgClinciu Glisca Petre petrecg Data 23 martie 2009 21:07:13
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
int parinte[1000],rg[1000],x,rez,m,n,c,y,i,q;
int first(int x)
{int 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("%d%d",&n,&m);
 for(i=1;i<=n;i++){rg[i]=1;parinte[i]=i;}
 for(i=1;i<=m;i++)
  {scanf("%d%d%d",&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;
}