Pagini recente » Cod sursa (job #346623) | Cod sursa (job #258227) | Cod sursa (job #229304) | Cod sursa (job #3188660) | Cod sursa (job #2205911)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
const int NMAX = 100005;
int dad[NMAX], maxlen[NMAX];
int findad(int x) {
if(dad[x] == x)
return x;
dad[x] = findad(dad[x]);
return dad[x];
}
void unionfind(int x,int y) {
if(maxlen[x] > maxlen[y])
dad[y] = findad(x);
else if(maxlen[x] < maxlen[y])
dad[x] = findad(y);
else {
dad[x] = findad(y);
maxlen[y] ++;
}
}
int main() {
int n,m;
cin >> n >> m;
for(int i = 1;i <= n;i ++)
dad[i] = i;
for(int i = 1;i <= m;i ++) {
int op, x, y;
cin >> op >> x >> y;
if(op == 1)
unionfind(findad(x), findad(y));
if(op == 2 && findad(x) == findad(y))
cout << "DA\n";
else if(op == 2)
cout << "NU\n";
}
return 0;
}