Pagini recente » Cod sursa (job #2256825) | Cod sursa (job #3192171) | Cod sursa (job #2340304) | Cod sursa (job #230877) | Cod sursa (job #1815457)
//Paduri de multimi disjuncte
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define maxN 100005
int N, M;
int tata[maxN];
int h[maxN];
//int root[maxN];
int root1, root2;
int i, cod, x, y;
void reuniune() {
if(tata[x] == 0) root1 = x;
else {
root1 = tata[x];
while(tata[root1] != 0)
root1 = tata[root1];
}
if(tata[y] == 0) root2 = y;
else {
root2 = tata[y];
while(tata[root2] != 0)
root2 = tata[root2];
}
if(h[root1] >= h[root2]) {
tata[root2] = root1;
h[root1] += h[root2];
}
else {
tata[root1] = root2;
h[root2] += h[root1];
}
}
void verificare() {
if(tata[x] == 0) root1 = x;
else {
root1 = tata[x];
while(tata[root1] != 0)
root1 = tata[root1];
}
if(tata[y] == 0) root2 = y;
else {
root2 = tata[y];
while(tata[root2] != 0)
root2 = tata[root2];
}
if(root1 == root2)
fout<<"DA\n";
else
fout<<"NU\n";
}
int main()
{
fin>>N>>M;
for(i = 1 ; i <= N ; i++)
h[i] = 1;
for(i = 1 ; i <= M ; i++) {
fin>>cod>>x>>y;
int j;
if(cod == 1) {
reuniune();
}
else {
verificare();
}
}
fin.close();
fout.close();
return 0;
}