Pagini recente » Cod sursa (job #2863113) | Cod sursa (job #95271) | Cod sursa (job #869593) | Cod sursa (job #2950127) | Cod sursa (job #1492719)
#include <fstream>
#define MaxN 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M, op, x, y;
int TT[MaxN], RG[MaxN];
int myfind(int x) {
int iter;
for (iter = x; iter != TT[iter]; iter = TT[iter]);
while (x != TT[x]) {
int temp = TT[x];
TT[x] = iter;
x = temp;
}
return iter;
}
void myunion(int x, int y) {
if (RG[x] > RG[y]) {
TT[y] = x;
RG[x] += RG[y];
} else {
TT[x] = y;
RG[y] += RG[x];
}
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; ++i) {
TT[i] = i;
RG[i] = 1;
}
for (int i = 1; i <= M; ++i) {
fin >> op >> x >> y;
if (op == 1) {
myunion(myfind(x), myfind(y));
} else {
if (myfind(x) == myfind(y)) {
fout << "DA\n";
} else {
fout << "NU\n";
}
}
}
return 0;
}