Pagini recente » Cod sursa (job #2903555) | Cod sursa (job #2940714) | Cod sursa (job #2620945) | Cod sursa (job #861498) | Cod sursa (job #1467956)
//Sursa fara compresia drumurilor
//Cu reuniune dupa rang
#include<cstdio>
using namespace std;
int t[100010], n, sz[100010];
int rad (int x){
if(t[x]==0) return x;
int r = rad (t[x]);
//t[x] = r;
return r;
}
int main(){
FILE *in=fopen("disjoint.in","r");
FILE *out=fopen("disjoint.out","w");
int m,type,x,y; fscanf(in,"%d%d",&n,&m);
for(int i = 0 ; i <= n ; i++){
sz[i] = 1;
}
int a, b;
while(m--){
fscanf(in,"%d%d%d",&type,&x,&y);
if(type==1){
a = rad(x);
b = rad(y);
if(a != b){
if(sz[a] < sz[b]){
t[a] = b;
sz[b] += sz[a];
}else{
t[b] = a;
sz[a] += sz[b];
}
}
}else{
if(rad(x)==rad(y))
fprintf(out,"DA\n");
else
fprintf(out,"NU\n");
}
}
fclose(in);
fclose(out);
return 0;
}