Pagini recente » Cod sursa (job #1991415) | Cod sursa (job #1671818) | Cod sursa (job #2464) | Cod sursa (job #674958) | Cod sursa (job #1345835)
#include<cstdio>
using namespace std;
#define Nmax 100005
int TT[Nmax], RG[Nmax];
int N, M;
int find(int x)
{
int R, y;
R=x;
while(TT[R]!=R)
R=TT[R];
for(; TT[x]!=x;)
{
x=TT[x];
TT[x]=R;
y=x;
}
return R;
}
int unite(int x, int y)
{
if( RG[x] > RG[y])
TT[y]=x;
else
TT[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(int i=1; i<=N; i++)
{
TT[i]=i;
RG[i]=1;
}
int x, y, op;
for(int i=1; i<=M; i++)
{
scanf("%d %d %d\n",&op, &x, &y);
if(op==2)
{
if( find(x) == find(y) ) printf("DA\n");
else printf("NU\n");
}
else
{
if (find(x) == find(y)) {fprintf(stderr,"%d ", i);return 0;}
unite(find(x), find(y));
}
}
return 0;
}