Pagini recente » Cod sursa (job #1192731) | Cod sursa (job #2824618) | Cod sursa (job #2037720) | Cod sursa (job #2037744) | Cod sursa (job #1705098)
#include <stdio.h>
#include <stack>
#include <vector>
#include <algorithm>
#define NMAX 100001
using namespace std;
int parent[NMAX], rang[NMAX];
int n, m;
int findSet(int x) {
int i = x;
while(parent[i] != i) {
i = parent[i];
}
int j = x, aux;
while (parent[j] != j) {
aux = parent[j];
parent[j] = i;
j = aux;
}
return i;
}
void unite(int x, int y) {
if (rang[x] > rang[y]) {
parent[y] = x;
} else {
parent[x] = y;
}
if (rang[x] == rang[y]) {
++ rang[y];
}
}
int main() {
FILE *in, *out;
in = fopen("disjoint.in", "r");
out = fopen("disjoint.out", "w");
int type, x, y;
fscanf(in, "%d%d", &n, &m);
for (int i = 1; i <= n; ++i) {
parent[i] = i;
}
for (int i = 1; i <= m; ++i) {
fscanf(in, "%d%d%d", &type, &x, &y);
if (type == 1) {
unite(x, y);
} else {
if (findSet(x) == findSet(y)) {
fprintf(out, "DA\n");
} else {
fprintf(out, "NU\n");
}
}
}
}