Pagini recente » Cod sursa (job #951635) | Cod sursa (job #2318426) | Cod sursa (job #1517351) | Cod sursa (job #337031) | Cod sursa (job #3250736)
#include <fstream>
using namespace std;
ifstream cin ("disjoint.in");
ofstream cout ("disjoint.out");
const int NMAX = 1e5;
int tt[NMAX], rang[NMAX];
void Unite(int a, int b) {
if (rang[a] > rang[b])
tt[b] = a;
else if (rang[b] > rang[a])
tt[a] = b;
else
tt[a] = b, rang[b]++;
}
//urcam pe arbore in sus pana gasim radacina (tatal tuturor)
int Root (int a) {
while (tt[a] != a)
a = tt[a];
return a;
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
tt[i] = i;
for (int i = 0; i < m; i++)
{
int a,b,op;
cin >> op >> a >> b;
if (op == 1)
Unite(a, b);
else cout << (Root(a) == Root(b) ? "DA" : "NU") << '\n';
}
return 0;
}