Pagini recente » Cod sursa (job #2761710) | Cod sursa (job #2576638) | Cod sursa (job #1087615) | Cod sursa (job #3272750) | Cod sursa (job #3193399)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata[100005], siz[100005], nxt[100005];
void unire(int x, int y){
int sefx, sefy, i, aux;
if(siz[x] < siz[y]){
swap(x, y);
}
sefx = tata[x];
sefy = tata[y];
if(sefx != sefy){
siz[x] += siz[y];
i = y;
do{
tata[i] = sefx;
i = nxt[i];
}while(y != i);
aux = nxt[y];
nxt[y] = nxt[x];
nxt[x] = aux;
}
}
int main()
{
int n, m, cer, x, y, i;
in >> n >> m;
for(i = 0; i <= n; i++){
tata[i] = i;
siz[i] = 1;
nxt[i] = i;
}
for(i = 0; i < m; i++){
in >> cer >> x >> y;
if(cer == 2){
if(tata[x] == tata[y]){
out << "DA\n";
}
else{
out << "NU\n";
}
}
else{
unire(x, y);
}
}
return 0;
}