Pagini recente » Harta5 | Cod sursa (job #164784) | Istoria paginii utilizator/andreea.m | Autentificare | Cod sursa (job #2953228)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define cin fin
#define cout fout
const int MAX_N = 1e5;
int sizeOfSet[MAX_N];
int parent[MAX_N];
int findSet(int x)
{
if (x == parent[x])
{
return x;
}
return parent[x] = findSet(parent[x]);
}
void unionSets(int a, int b)
{
if (a == b)
{
return;
}
if (sizeOfSet[a] > sizeOfSet[b])
{
swap(a, b);
}
parent[b] = a;
sizeOfSet[a] += sizeOfSet[b];
}
int main()
{
ios::sync_with_stdio(false);
int n, q;
cin >> n >> q;
for (int i = 0; i < n; i++)
{
parent[i] = i;
sizeOfSet[i] = 1;
}
for (int i = 0; i < q; i++)
{
int queryType, a, b;
cin >> queryType >> a >> b;
if (queryType == 1)
{
unionSets(findSet(a), findSet(b));
}
else if (findSet(a) == findSet(b))
{
cout << "DA\n";
}
else
{
cout << "NU\n";
}
}
return 0;
}