Pagini recente » Cod sursa (job #2269195) | Cod sursa (job #2444878) | Cod sursa (job #1961013) | Cod sursa (job #62255) | Cod sursa (job #2444723)
#include <fstream>
using namespace std;
#define maxn 100005
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int arb[maxn], rang[maxn],n,m;
int fi(int x){
int R,y;
for(R=x; arb[R]!=R; R=arb[R]);
for(; arb[x]!=x; x=arb[x]){
y=arb[x];
arb[x]=R;
x=y;
}
return R;
}
void unite(int x, int y){
if(rang[x]>rang[y])
arb[y]=x;
else arb[x]=y;
if(rang[x]==rang[y])
rang[y]++;
}
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++){
arb[i]=i;
rang[i]=1;
}
int x,y,c;
while(m){
cin>>c>>x>>y;
if(c==1){
if(fi(x)!=fi(y))
unite(fi(x),fi(y));
}else{
if(fi(x)==fi(y))
cout<<"DA\n";
else
cout<<"NU\n";
}
m--;
}
}