Pagini recente » Cod sursa (job #191115) | Cod sursa (job #77936) | Borderou de evaluare (job #888934) | Cod sursa (job #2649436) | Cod sursa (job #2422562)
#include <stdio.h>
#define NMAX 100020
int TT[NMAX], RG[NMAX];
int N, M;
int find(int x)
{
int R;
for(R=x;TT[R]!=R;R=TT[R]);
while(x!=R)
{
int y=TT[x];
TT[x]=R;
x=y;
}
return R;
}
void unite(int x,int y)
{
if(RG[x]<RG[y])
{
TT[x]=y;
}
else
{
TT[y]=x;
}
if(RG[x]==RG[y])
RG[y]++;
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d ", &N, &M);
int i, x, y, cd;
for(i=1;i<=N;i++)
{
TT[i]=i;
RG[i]=1;
}
for(i=1;i<=M;i++)
{
scanf("%d %d %d", &cd, &x, &y);
if(cd==2)
{
if (find(x) == find(y)) printf("DA\n");
else printf("NU\n");
}
else
{
unite(find(x),find(y));
}
}
return 0;
//initial fiecare nod pointeaza catre el insusi iar rangul fiecarui arbore este 1
return 0;
}