Pagini recente » Cod sursa (job #1170769) | Cod sursa (job #1916637) | Cod sursa (job #894417) | Cod sursa (job #557814) | Cod sursa (job #2953232)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define cin fin
#define cout fout
class DisjointSets
{
private:
vector<size_t> sizeOfSet{0};
vector<size_t> parent{0};
public:
DisjointSets(const int &n)
{
sizeOfSet.resize(n + 1, 1);
parent.resize(n + 1);
for (size_t i = 0; i < n; i++)
{
parent[i] = i;
}
}
int findSet(int x)
{
if (x == parent[x])
{
return x;
}
return parent[x] = findSet(parent[x]);
}
void unionSets(int a, int b)
{
a = findSet(a);
b = findSet(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;
DisjointSets ds(n);
for (int i = 0; i < q; i++)
{
int queryType, a, b;
cin >> queryType >> a >> b;
if (queryType == 1)
{
ds.unionSets(a, b);
}
else if (ds.findSet(a) == ds.findSet(b))
{
cout << "DA\n";
}
else
{
cout << "NU\n";
}
}
return 0;
}