Pagini recente » Cod sursa (job #2229578) | Cod sursa (job #902902)
Cod sursa(job #902902)
#include <stdio.h>
using namespace std;
#define Nmax 100010
int n, m, rang[Nmax], rad[Nmax];
int find(int x){
int r = x, aux;
while( rad[r] != r ) r = rad[r];
while(x != r){
aux = rad[x];
rad[x] = r;
x = aux;
}
return r;
}
void unite(int x, int y){
if( rang[x] > rang[y] )
rad[y] = x;
else rad[x] = y;
if(rang[x] == rang[y]) ++rang[y];
}
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int x, y, cod;
scanf("%i %i", &n, &m);
for(int i = 1; i <= n; ++i){
rang[i] = 1;
rad[i] = i;
}
for(int i = 1; i <= m; ++i){
scanf("%i %i %i", &cod, &x, &y);
if(cod == 2){
if( find(x) == find(y) ) printf("DA\n");
else printf("NU\n");
}
else
unite( find(x), find(y) );
}
fclose(stdin);
fclose(stdout);
return 0;
}