Pagini recente » Cod sursa (job #3173945) | Cod sursa (job #2466564) | Monitorul de evaluare | Cod sursa (job #1304480) | Cod sursa (job #3254876)
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n,m;
const int NMAX=100003;
int tata[NMAX+1],inalt[NMAX+1];
int cod,x,y;
int rad(int nod){
if(nod==tata[nod])
return nod;
int rnod=rad(tata[nod]);
tata[nod]=rnod;
return rnod;
}
void reuniune(){
int rx=rad(x);
int ry=rad(y);
if(inalt[rx] > inalt[ry])
{
tata[ry]=rx;
}
else if(inalt[rx] < inalt[ry])
tata[rx]=ry;
else{
tata[ry]=rx;
inalt[rx]++;
}
}
bool interogare(){
return (rad(x) == rad(y));
}
int main(){
fin >> n >> m;
for(int i=1;i<=n;i++)
tata[i]=i;
for(int i=1;i<=m;i++)
{
fin>>cod>>x>>y;
if(cod==1){
reuniune();
}
else{
if(interogare())
fout <<"DA\n";
else
fout << "NU\n";
}
}
return 0;
}