Pagini recente » Cod sursa (job #1691798) | Cod sursa (job #2345766) | Cod sursa (job #1767876) | Cod sursa (job #110421) | Cod sursa (job #2525974)
#include <fstream>
#define NMAX 100002
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n, m;
int tata[NMAX];
int h[NMAX];
int Find(int x);
void Union(int x, int y);
int main()
{
int o, x, y;
in>>n>>m;
for(int i=1;i<=m;i++){
in>>o>>x>>y;
if(o==1)
Union(x, y);
else{
if(Find(x)==Find(y))
out<<"DA"<<'\n';
else out<<"NU"<<'\n';
}
}
return 0;
}
int Find(int x){
int rad=x, u;
while(tata[rad]) rad=tata[rad];
//compresez
while(tata[x]){
u=tata[x];
tata[x]=rad;
x=u;
}
return rad;
}
void Union(int x, int y){
int rx, ry;
rx=Find(x);
ry=Find(y);
if(h[rx]>h[ry])
tata[ry]=rx;
else{
tata[rx]=ry;
if(h[rx]==h[ry]) h[ry]++;
}
}