Pagini recente » Cod sursa (job #339089) | Cod sursa (job #2849467) | Cod sursa (job #700963) | Cod sursa (job #3258075) | Cod sursa (job #2500860)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, m, p[100001], r[100001];
int parent(int a) {
int ans = a;
while(ans != p[ans])
ans = p[ans];
while(a != p[a]) {
int temp = p[a];
p[a] = ans;
a = temp;
}
return ans;
}
void unite(int a, int b) {
r[a] += p[a] == p[b];
if(r[a] < r[b])
p[parent(a)] = p[parent(b)];
else
p[parent(b)] = p[parent(a)];
}
bool same(int a, int b) {
return parent(a) == parent(b);
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
p[i] = i;
r[i] = 1;
}
while(m--) {
int cer, a, b;
cin >> cer >> a >> b;
if(cer == 1)
unite(a, b);
else
cout << (same(a, b) ? "DA\n" : "NU\n");
}
return 0;
}