Pagini recente » Cod sursa (job #1581908) | Cod sursa (job #148666) | Cod sursa (job #15080) | Cod sursa (job #3244746) | Cod sursa (job #2940747)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int parinte[100001], inaltime[100001];
int Reprez(int i){
while(parinte[i]!=-1)
i = parinte[i];
return i;
}
void reuneste(int i, int j){
int r1, r2;
r1 = Reprez(i);
r2 = Reprez(j);
if(inaltime[r1] > inaltime[r2])
parinte[r2] = r1;
else{
parinte[r1] = r2;
if(inaltime[r1]==inaltime[r2])
inaltime[r2] += 1;
}
}
int main()
{
fin>>n>>m;
for(int i = 1; i <=n; i++){
parinte[i] = -1;
inaltime[i] = 1;
}
for(int i = 0; i < m; i++){
int op, x, y;
fin>>op>>x>>y;
if(op==1){
reuneste(x, y);
}
else{
if(Reprez(x) == Reprez(y))
fout<<"DA";
else
fout<<"NU";
fout<<"\n";
}
}
return 0;
}