Pagini recente » Cod sursa (job #1604140) | Cod sursa (job #847526) | Cod sursa (job #2768706) | Cod sursa (job #3280399) | Cod sursa (job #889329)
Cod sursa(job #889329)
#include<stdio.h>
#define INF 100002
int t[INF],rank[INF];
int n,m;
int find(int nod)
{
if(t[nod]!=nod)
t[nod]=find(t[nod]);
else return nod;
}
void merge(int n1,int n2)
{
int r1=find(n1);
int r2=find(n2);
if(rank[r1]>rank[r2])t[r2]=r1;
if(rank[r2]>rank[r2])t[r1]=r2;
if(rank[r1]==rank[r2]){t[r2]=r1;rank[r1]++;}
}
bool check(int n1,int n2)
{
int r1=find(n1);
int r2=find(n2);
if(r1==r2)return true;
return false;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){t[i]=i;rank[i]=0;}
for(int i=0;i<m;++i)
{
int c,x,y;
scanf("%d%d%d",&c,&x,&y);
if(c==1)merge(x,y);
else
{
if(check(x,y))printf("DA\n");
else printf("NU\n");
}
}
return 0;
}