Pagini recente » Cod sursa (job #3039483) | Cod sursa (job #1960106) | Cod sursa (job #1070020) | Cod sursa (job #60485) | Cod sursa (job #1112799)
#include <iostream>
#include <fstream>
using namespace std;
#define MAXN 100005
FILE* f = fopen("disjoint.in", "r");
FILE* g = fopen("disjoint.out", "w");
int n, m;
int tata[MAXN], rang[MAXN];
int find(int x) {
int r;
for (r = x; r != tata[r]; r = tata[r]);
while (x != tata[x]) {
int y = tata[x];
tata[x] = r;
x = y;
}
return r;
}
void update(int x, int y)
{
x = find(x);
y = find(y);
if (rang[x] < rang[y]) {
tata[x] = y;
} else {
tata[y] = x;
}
if (rang[x] == rang[y]) {
rang[x]++;
}
}
bool query(int x, int y) {
return (find(x) == find(y));
}
int main()
{
fscanf(f, "%d %d\n", &n, &m);
for (int i = 1; i <= n; i++) {
tata[i] = i;
rang[i] = 1;
}
for (int i = 1; i <= m; i++) {
int x, y, cod;
fscanf(f, "%d %d %d\n", &cod, &x, &y);
switch (cod) {
case 1:
update(x, y);
break;
case 2:
if (query(x, y)) {
fprintf(g, "DA\n");
} else {
fprintf(g, "NU\n");
}
}
}
fclose(f);
fclose(g);
return 0;
}