Pagini recente » Cod sursa (job #3248364) | Cod sursa (job #107953) | Cod sursa (job #1504340) | Cod sursa (job #2974792) | Cod sursa (job #286795)
Cod sursa(job #286795)
#include <cstdio>
int tip, x, y, i, n, m, t[100111];
int tata(int x){
int T = x;
while( t[T] > 0 )
T = t[T];
return T;
}
int inclus(int x, int y){
int t1, t2;
t1 = tata(x);
t2 = tata(y);
if( t1 == t2 )
return 1;
return 0;
}
void reun(int x, int y){
int t1, t2;
t1 = tata(x);
t2 = tata(y);
if( t1 != t2 )
if( -t[t1] > - t[t2] ){
t[t1]+=t[t2];
t[t2] = t1;
}
else{
t[t2]+=t[t1];
t[t1] = t2;
}
}
int main(){
FILE *f = fopen("disjoint.in", "r");
FILE *g = fopen("disjoint.out", "w");
fscanf(f,"%d %d",&n,&m);
for(i=1; i<=n; i++)
t[i] = -1;
for(i=1; i<=m; i++){
fscanf(f,"%d %d %d",&tip,&x,&y);
if( tip == 1 ) reun(x, y);
else
if( inclus(x,y) )
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
fclose(f);
fclose(g);
}