Pagini recente » Cod sursa (job #2938382) | Cod sursa (job #1852642) | Cod sursa (job #879769) | Cod sursa (job #1375894) | Cod sursa (job #1756766)
#include <fstream>
using namespace std;
int tata[100010];
int s[100010];
int gaseste(int x);
bool gaseste(int a, int b);
void uneste(int a, int b);
int main()
{
for (int i = 1; i <= 100000; i++)
tata[i] = i, s[i] = 1;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n, op, a, b;
in >> op >> n;
while (n--) {
in >> op >> a >> b;
if (op == 1)
uneste(a, b);
else
out << (gaseste(a, b) ? "DA\n" : "NU\n");
}
return 0;
}
int gaseste(int x)
{
if (tata[x] != x)
tata[x] = gaseste(tata[x]);
return tata[x];
}
bool gaseste(int a, int b)
{
a = gaseste(a);
b = gaseste(b);
return (a == b);
}
void uneste(int a, int b)
{
a = gaseste(a);
b = gaseste(b);
if (s[a] > s[b]) {
s[a] += s[b];
tata[b] = a;
}
else {
s[b] += s[a];
tata[a] = b;
}
}