Cod sursa(job #661941)

Utilizator b_polarAgape Mihai b_polar Data 15 ianuarie 2012 16:13:57
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>
#include <stdlib.h>

int N,M,*p;

int Ancestor(int n)
{
  if(p[n]==n)
    return n;
  else
    return p[n]=Ancestor(p[n]);
} 

void InitParents()
{
  int i;
  p=(int*)malloc((N+1)*sizeof(int));
  for(i=1;i<=N;i++)
    p[i]=i;
}

int main()
{
  int o,l,r,pL,pR;

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

  scanf("%d%d",&N,&M);
  for(InitParents();M--;)
  {
    scanf("%d%d%d",&o,&l,&r);
    pL=Ancestor(l);
    pR=Ancestor(r);
    switch(o)
    {
      case 1:
	if(pL<pR)
	  p[pR]=pL;
	else
	  p[pL]=pR;
	break;
      default:
	printf("%s\n",pL==pR?"DA":"NU");
    }
  }

  free(p);

  return 0;
}