Pagini recente » Cod sursa (job #2291820) | Cod sursa (job #2374758) | Cod sursa (job #2512817) | Cod sursa (job #1957010) | Cod sursa (job #580228)
Cod sursa(job #580228)
#include<stdio.h>
#define maxN 100005
FILE*f=fopen("disjoint.in","r");
FILE*g=fopen("disjoint.out","w");
int n,m,op,x,y,i,aux;
int T[maxN],R[maxN];
void unify ( int a, int b ){
if ( R[x] > R[y] ){
T[y] = x;
}
else{
T[x] = y;
}
if ( R[x] == R[y] ){
++R[y];
}
}
int root ( int nod ){
int nod2 = nod;
for ( nod2 = nod ; T[nod2] != nod2 ; nod2 = T[nod2] );
for ( ; nod != nod2 ; ){
aux = T[nod];
T[nod] = nod2;
nod = aux;
}
return nod2;
}
int main () {
fscanf(f,"%d %d",&n,&m);
for ( i = 1 ; i <= n ; ++i ){
T[i] = i;
R[i] = 1;
}
for ( i = 1 ; i <= m ; ++i ){
fscanf(f,"%d %d %d",&op,&x,&y);
if ( op == 1 ){
unify( root(x) , root(y) );
}
else{
if ( root(x) == root(y) ){
fprintf(g,"DA\n");
}
else{
fprintf(g,"NU\n");
}
}
}
fclose(f);
fclose(g);
return 0;
}