Cod sursa(job #260233)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 16 februarie 2009 20:31:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <cstdio>
#define N 100001
long t[N],l[N];
void reuneste(int x,int y)
{while(t[x]!=0)x=t[x];
 while(t[y]!=0)y=t[y];
 if(l[x]==l[y])t[x]=y,l[y]++;
 else if(l[x]<l[y])t[x]=y;
 else t[y]=x;
}
int acelasi_arbore(int x,int y)
{while(t[x]!=0)x=t[x];
 while(t[y]!=0)y=t[y];
 if(x==y)return 1;
 else return 0;
}
int main ()
{freopen("disjoint.in","r",stdin);
 freopen("disjoint.out","w",stdout);
 long n,m,i,c,x,y;
 scanf("%d%d",&n,&m);
 for (i=1;i<=m;i++)
 {scanf("%d%d%d",&c,&x,&y);
  if(c==1)
  {reuneste(x,y);
  }
  else
  {if(acelasi_arbore(x,y))
   {printf("DA\n");
   }
   else
   {printf("NU\n");
   }
  }
 }
 return 0;
}