Pagini recente » Cod sursa (job #378808) | Cod sursa (job #773907) | Cod sursa (job #1214723) | Cod sursa (job #2027132) | Cod sursa (job #2673920)
#include <fstream>
using namespace std;
ifstream cin ("disjoint.in");
ofstream cout ("disjoint.out");
int set[100005];
int nr[100005];
int S(int x)
{
if (x != set[x])
return x = S(set[x]);
else
return x;
}
int unire(int x, int y)
{
int xx = S(x);
int yy = S(y);
if (nr[xx] < nr[yy])
{
set[xx] = yy;
nr[yy] += nr[xx];
}
else
{
set[yy] = xx;
nr[xx] += nr[yy];
}
}
int main()
{
int n, i, m;
cin >> n >> m;
for (i = 1; i <= n; i++)
set[i] = i, nr[i] = 1;
for (i = 1; i <= m; i++)
{
int tip, x, y;
cin >> tip >> x >> y;
if (tip == 1)
unire(x, y);
else
{
if (S(x) == S(y))
cout <<"DA" ;
else
cout << "NU";
cout << '\n';
}
}
return 0;
}