Pagini recente » Cod sursa (job #1727181) | Cod sursa (job #764248) | Cod sursa (job #217397) | Cod sursa (job #3032520) | Cod sursa (job #2103613)
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int N = 100002;
int rang[N], tata[N];
void Union(int x, int y){
if(rang[x] > rang[y])
tata[y] = x;
else
tata[x] = y;
if(rang[x] == rang[y])
rang[y]++;
}
int Find(int x){
int rad, aux;
for(rad = x;tata[rad] != rad;rad = tata[rad]);
for(;tata[x] != x;){
aux = tata[x];
tata[x] = rad;
x = aux;
}
return rad;
}
int main()
{
int n,m,x,y,C,f1,f2;
in>>n>>m;
for(int i=1;i<=n;i++){
rang[i] = 1;
tata[i] = i;
}
for(int i=1;i<=m;i++){
in>>C>>x>>y;
if(C == 2){
if(Find(x) == Find(y))
out<<"DA\n";
else
out<<"NU\n";
}
else{
f1 = Find(x);
f2 = Find(y);
if(f1 != f2)
Union(f1,f2);
}
}
in.close();
out.close();
return 0;
}