Pagini recente » Cod sursa (job #2743676) | Cod sursa (job #2751946) | Cod sursa (job #2060852) | Cod sursa (job #713244) | Cod sursa (job #2526024)
#include <fstream>
#define NMAX 200002
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int tata[NMAX], h[NMAX]; // h[x] = inalt arb cu rad x
int Find(int x); // returneaza radacina arborelui din care face parte x
void Union (int x, int y); // reuneste arborele din care face parte x cu cel in care face parte y
void citire();
int main()
{
citire();
return 0;
}
void citire(){
fin >> n >> m;
for(int i = 1; i <= n; i++)
tata[i] = 0,h[i]=0;
int cod, x, y;
for(int i = 1; i <= m; i++){
fin >> cod >> x >> y;
if(cod == 1) Union(x, y);
else {
if(Find(x) == Find(y)) fout << "DA" << '\n';
else fout << "NU" << '\n';
}
}
}
int Find(int x){
int rad = x, y;
while(tata[rad] != 0) rad = tata[rad];
while(tata[x]){
y = tata[x];
tata[x]=rad;
x=y;
}
return rad;
}
void Union(int x, int y){
int rx = Find(x);
int ry = Find(y);
if(h[rx] > h[ry])
tata[ry] = rx;
else{ tata[rx] = ry;
if(h[rx] == h[ry])
h[ry]++;
}
// tata[ry] = rx;
}