Pagini recente » Cod sursa (job #1945902) | Cod sursa (job #2264425) | Cod sursa (job #2648862) | Cod sursa (job #742603) | Cod sursa (job #1159165)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#define MAXINT 100100
using namespace std;
FILE *f=fopen("disjoint.in","r");
FILE *fout=fopen("disjoint.out","w");
int n,m;
int rk[MAXINT],parinte[MAXINT];
int find_p(int x)
{
int R=x,y;
while(parinte[R]!=R)
{R=parinte[R];}
while(parinte[x]!=x)
{
y=parinte[x];
parinte[x]=R;
x=y;
}
return R;
}
void link(int x,int y)
{
if(rk[x]>rk[y])
{
parinte[y]=x;
return;
}
else
parinte[x]=y;
if(rk[x]==rk[y])
rk[y]++;
}
void unite(int x, int y)
{
link(find_p(x),find_p(y));
}
int main()
{
fscanf(f,"%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
rk[i]=0;
parinte[i]=i;
}
int op, el1,el2;
for(int i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&op,&el1,&el2);
//cout<<op<<" "<<el1<<" "<<el2<<endl;
if(op==2)
{
if(find_p(el1)==find_p(el2))
fprintf(fout,"DA\n");
else
fprintf(fout,"NU\n");
}
else
{
unite(el1,el2);
}
}
return 0;
}