Pagini recente » Istoria paginii runda/trie_neneaca_pa_banii_babii | Istoria paginii runda/muntele_suferintei_2/clasament | Istoria paginii runda/runda_ezoterica_2 | preoji/clasament/10 | Cod sursa (job #2701331)
#include <bits/stdc++.h>
using namespace std;
const int mxN = 1e5 + 100;
int parent[mxN];
int rang[mxN];
char buff[mxN * 3];
char * buffp = buff;
#define FL(nm) do { freopen(nm ".in", "r", stdin); freopen(nm ".out", "w", stdout); } while (false)
int main() {
// FL("disjoint");
int n, m;
scanf("%d%d", &n, &m);
for (int i = 0; i < n + 1; i++) {
parent[i] = i;
rang[i] = 0;
}
while (m--) {
int o, i, j;
scanf("%d%d%d", &o, &i, &j);
if (o == 1) {
if (rang[i] > rang[j]) {
parent[j] = parent[i];
} else {
parent[i] = parent[j];
}
if (rang[i] == rang[j]) {
rang[j]++;
}
} else if (o == 2) {
int pi = i;
int pj = j;
while (parent[pi] != pi) {
pi = parent[pi];
}
while (parent[i] != i) {
int tmp = parent[i];
parent[i] = pi;
i = tmp;
}
while (parent[pj] != pj) {
pj = parent[pj];
}
while (parent[j] != j) {
int tmp = parent[j];
parent[j] = pj;
j = tmp;
}
if (pi == pj) {
strcpy(buffp, "DA\n");
} else {
strcpy(buffp, "NU\n");
}
buffp += 3;
}
}
puts(buff);
return 0;
}