Pagini recente » Cod sursa (job #3314144) | Cod sursa (job #748808) | Cod sursa (job #3316025) | Cod sursa (job #3316024) | Cod sursa (job #3325698)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define NMAX 100001
int tata[NMAX];
int rang[NMAX];
int radacina(int k) {
if(tata[k] == 0) {
return k;
}
else {
int x = radacina(tata[k]);
tata[k] = x;
return x;
}
}
void unire(int k, int p) {
int rk = radacina(k), rp = radacina(p);
if(rk != rp) {
if(rang[rk] > rang[rp]) {
tata[rp] = rk;
}
else {
tata[rk] = rp;
if(rang[rk] == rang[rp])
rang[rp]++;
}
}
}
int main()
{
int n, m, cod, x, y;
fin>>n>>m;
for(int i = 1; i<=m; i++) {
fin>>cod>>x>>y;
if(cod == 1) {
unire(x, y);
}
else if(cod == 2) {
if(radacina(x) == radacina(y)) {
fout<<"DA\n";
}
else {
fout<<"NU\n";
}
}
}
return 0;
}