Pagini recente » Cod sursa (job #2819481) | Cod sursa (job #1396594) | Cod sursa (job #569012) | Cod sursa (job #975261) | Cod sursa (job #2701684)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100005;
int tt[NMAX], rang[NMAX];
int n, m, i, j, x, y, operatie;
int find_root (int x) {
int r;
for (r = x; tt[r] != r; r = tt[r]);
while (tt[x] != x) {
int y = tt[x];
tt[x] = r;
x = y;
}
return r;
}
int unire (int x, int y) {
if (rang[x] > rang[y])
tt[y] = x;
else
tt[x] = y;
if (rang[x] == rang[y])
rang[y]++;
}
int main(){
cin >> n >> m;
for (i = 1; i <= n; i++) {
rang[i] = 1;
tt[i] = i;
}
for (j = 1; j <= m; j++) {
fin >> operatie >> x >> y;
if (operatie == 1)
unire(find_root(x), find_root(y));
else {
if (find_root(x) == find_root(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
}