Pagini recente » Cod sursa (job #1669386) | Cod sursa (job #491249) | Cod sursa (job #1468852) | Cod sursa (job #1614835) | Cod sursa (job #609247)
Cod sursa(job #609247)
#include<cstdio>
#define infile "disjoint.in"
#define outfile "disjoint.out"
#define n_max 100005
using namespace std;
int n,m;
int T[n_max],R[n_max];
void init();
void init()
{
for(int i=1;i<=n;i++)
T[i]=i, R[i]=1;
}
int cauta(int x)
{
int r,y;
for(r=x; T[r]!=r; r=T[r]);
while(T[x]!=x)
{
y=T[x];
T[x]=r;
x=y;
}
return r;
}
void uneste(int x, int y)
{
//if(R[x] < R[y])
T[x]=y;
//else
// T[y]=x;
//if(R[x] == R[y])
// R[x]++;
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
scanf("%d %d",&n,&m);
init();
int q,x,y;
while(m--)
{
scanf("%d %d %d",&q,&x,&y);
if(q==1)
uneste(cauta(x),cauta(y));
else
{
if(cauta(x) == cauta(y))
printf("DA\n");
else
printf("NU\n");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}