Pagini recente » Cod sursa (job #588374) | Cod sursa (job #1030902) | Cod sursa (job #2524164) | Cod sursa (job #822159) | Cod sursa (job #2859194)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int T[200005], rg[200005], n, M, x, y, c;
void Union(int a, int b) {
if(rg[a] < rg[b]) {
T[a] = T[b];
} else {
T[b] = T[a];
}
if(rg[a] == rg[b]) {
rg[a]++;
}
}
int Find(int nod) {
int x = nod;
while(x != T[x]) {
x = T[x];
}
while(nod != T[nod]) {
int temp = T[nod];
T[nod] = x;
nod = temp;
}
return nod;
}
int main() {
for(int i = 1; i <= 200000; i++) {
T[i] = i;
rg[i] = 1;
}
fin >> n >> M;
for(int i = 1; i <= M; i++) {
fin >> c >> x >> y;
if(c == 1) {
int nod1 = Find(x), nod2 = Find(y);
if(nod1 != nod2) {
Union(nod1, nod2);
}
} else {
fout << (Find(x) == Find(y) ? "DA\n" : "NU\n");
}
}
fin.close();
fout.close();
return 0;
}