Pagini recente » Cod sursa (job #931731) | Cod sursa (job #694122) | Cod sursa (job #1353430) | Cod sursa (job #1127684) | Cod sursa (job #2228397)
#include <iostream>
#include <fstream>
#define MAXN 100005
using namespace std;
ifstream in("dijoint.in");
ofstream out("disjoint.out");
int rang[MAXN],tata[MAXN],n,m;
int Find(int nod){
int stapan = nod;
while(tata[stapan] != stapan)
stapan = tata[stapan];
while(tata[nod] != stapan){
int copie = nod;
tata[copie] = stapan;
nod = tata[nod];
}
return stapan;
}
void Union(int x,int y){
if(rang[x] < rang[y])
tata[x] = y;
else if(rang[y] <= rang[x])
tata[y] = x;
if(rang[x] == rang[y])
rang[x]++;
}
int main()
{
in>>n>>m;
for(int i = 1; i <= n; i++){
tata[i] = i;
rang[i] = 1;
}
for(int i = 1; i <= m; i++){
int type,x,y;
in>>type>>x>>y;
if(type == 1)
Union(Find(x),Find(y));
else{
if(Find(x) == Find(y))
out<<"DA"<<"\n";
else
out<<"NU"<<"\n";
}
}
return 0;
}