Pagini recente » Cod sursa (job #2054727) | Profil Oleaginoasa | Cod sursa (job #796866) | Cod sursa (job #812705) | Cod sursa (job #3218518)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int MAX = 100000;
int num, count;
int par[MAX + 1], size[MAX + 1];
int operation, var1, var2;
int find_set(int v) {
if (v == par[v])
return v;
return par[v] = find_set(par[v]);
}
void make_set(int v) {
par[v] = v;
size[v] = 1;
}
void union_sets(int a, int b) {
a = find_set(a);
b = find_set(b);
if (a != b) {
if (size[a] < size[b])
swap(a, b);
par[b] = a;
size[a] += size[b];
}
}
int main() {
fin >> num >> count;
for (int i = 1; i <= num; i++)
make_set(i);
for (int i = 1; i <= count; i++) {
fin >> operation >> var1 >> var2;
if (operation == 1)
union_sets(var1, var2);
else {
if (find_set(var1) == find_set(var2))
fout << "DA";
else
fout << "NU";
fout << '\n';
}
}
return 0;
}