Pagini recente » Cod sursa (job #2904102) | Cod sursa (job #2733844) | Cod sursa (job #1722754) | Cod sursa (job #2945139) | Cod sursa (job #2944731)
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M, *multime, rang_multime[100000];
int find_radacina(int a){
int radacina, aux;
for(radacina = a; multime[radacina] != radacina; radacina = multime[radacina]);
while(multime[a] != a){
aux = multime[a];
multime[a] = radacina;
a = aux;
}
return radacina;
}
void unire_multimi(int a, int b){
if(rang_multime[a] > rang_multime[b]){
multime[b] = a;
rang_multime[a]++;
}
else{
multime[a] = b;
rang_multime[b]++;
}
}
int main()
{
fin >> N >> M;
int cod, x, y;
multime = new int[N];
for(int i = 1; i <= N; i++){
multime[i] = i;
rang_multime[i] = 1;
}
for(int i = 0; i < M; i++){
fin >> cod >> x >> y;
if(cod == 1){
unire_multimi(find_radacina(x), find_radacina(y));
}else{
if(find_radacina(x) == find_radacina(y))
fout << "DA\n";
else fout << "NU\n";
}
}
return 0;
}