Pagini recente » Istoria paginii utilizator/tzutz | Atasamentele paginii 3uqjey4 | Istoria paginii runda/biti3/clasament | Istoria paginii runda/2016.02.03-verificare/clasament | Cod sursa (job #1330147)
#include<stdio.h>
#define MAXN 100005
FILE *f=fopen("disjoint.in","r"), *g=fopen("disjoint.out","w");
long int N, M, Tata[MAXN], Inaltime[MAXN], Q, X, Y; // Inaltime[i] = la ce inaltime se afla i
long int Grupa( long int x ){
long int R, RR, RRvechi;
R=x;
while( Tata[R]!=0 ) R = Tata[R];
RR=x;
while( Tata[RR]!=0 ) { RRvechi = RR; RR=Tata[RR]; Tata[RRvechi]=R; }
return R;
}
void Uneste(long int x, long int y){
x = Grupa(x); y = Grupa(y); // Unim varfurile grupei, nu pe x cu y
if ( Inaltime[x] > Inaltime[y] ) Tata[y]=x;
else if( Inaltime[x] < Inaltime[y] ) Tata[x]=y;
else{ Tata[x]=y; Inaltime[y]++; } // Egalitate
}
int main(){
fscanf(f,"%ld %ld\n",&N,&M);
for(long int i=1;i<=M;i++){
fscanf(f,"%ld %ld %ld\n",&Q,&X,&Y);
if(Q==1) Uneste(X,Y);
else{
if( Grupa(X) == Grupa(Y) ) {fprintf(g,"DA\n");}
else fprintf(g,"NU\n");
}
}
return 0;
}