Pagini recente » Cod sursa (job #1696098) | Cod sursa (job #3162625) | Cod sursa (job #3122548) | Cod sursa (job #2212251) | Cod sursa (job #1185641)
#include <cstdio>
using namespace std;
int RG[100020],TT[100020],n,m;
int find(int x ){
register unsigned int y , R;
for(R = x; R != TT[R]; R = TT[R]);
for( ; TT[x] != x ; ){
y = TT[x];
TT[x] = R;
x = y; }
return R;
}
void unite( int x , int y ){
if( RG[x] > RG[y] ) TT[y] = x;
else TT[x] = y;
if( RG[x] == RG[y] ) ++RG[y];
}
int main(){
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d %d ", &n , &m);
for( register int i = 1; i <= n; ++i )
RG[i] = 1 , TT[i] = i;
register int caz , x ,y;
for( register int i = 1; i <= m; ++i ){
scanf("%d %d %d", &caz , &x , &y);
if( caz == 2 )
if( find(x) == find(y) ) printf("DA\n");
else printf("NU\n");
else unite( find(x) , find(y) ); }
return 0;
}