Pagini recente » Cod sursa (job #2863613) | Cod sursa (job #557997) | Cod sursa (job #1045988) | Cod sursa (job #2762506) | Cod sursa (job #1434577)
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int N, M, Rang[100010], Tata[100010];
int Find(int x)
{
int r = x;
while (Tata[r] != r) r = Tata[r];
int y = x;
while (y != r)
{
y = Tata[x];
Tata[x] = r;
x = y;
}
return r;
}
void Unite(int x, int y)
{
if (Rang[x] < Rang[y]) {
Tata[x] = y;
}
else {
Tata[y] = x;
}
if (Rang[x] == Rang[y]) Rang[x]++;
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; i++) {
Tata[i] = i;
Rang[i] = 1;
}
for (int i = 1, tip, x, y; i <= M; i++)
{
fin >> tip >> x >> y;
if (tip == 1) {
Unite(Find(x), Find(y));
}
else {
if (Find(x) == Find(y)) fout << "DA\n";
else fout << "NU\n";
}
}
fout.close();
return 0;
}