Pagini recente » Cod sursa (job #1764993) | Cod sursa (job #2401699) | Cod sursa (job #1431247) | Cod sursa (job #2834715) | Cod sursa (job #1468271)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
#define NMAX 100010
int parinte[NMAX],rang[NMAX];
int cauta(int x)
{
int ant,org,aux;
org=parinte[x];
while(parinte[org] != org)
org=parinte[org];
ant=x;
while(parinte[ant] != ant)
{
aux=parinte[ant];
parinte[ant]=org;
ant=aux;
}
return ant;
}
void uneste(int x, int y)
{
if(rang[x] > rang[y])
parinte[y] = x;
else
parinte[x] = y;
rang[y]++;
}
int n,m,i,j,tip,nr1,nr2;
int main()
{
cin>>n>>m;
for(i=1; i<=n; i++)
{
parinte[i]=i;
rang[i]=1;
}
for(i=1; i<=m; i++)
{
cin>>tip;
if(tip==1)
{
cin>>nr1>>nr2;
uneste(cauta(nr1),cauta(nr2));
}
else
{
cin>>nr1>>nr2;
if(cauta(nr1) == cauta (nr2))
cout<<"DA\n";
else
cout<<"NU\n";
}
}
}