Pagini recente » Cod sursa (job #2741311) | Cod sursa (job #1660276) | Cod sursa (job #978896) | Cod sursa (job #1983027) | Cod sursa (job #580250)
Cod sursa(job #580250)
#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 x, int y ){
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 != T[nod] ; ){
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;
}