Pagini recente » Cod sursa (job #3336177) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1883234) | Cod sursa (job #2460857)
#include <bits/stdc++.h>
const int MV = 1e5 ;
FILE *in = fopen("disjoint.in", "r"), *out = fopen("disjoint.out", "w") ;
int n, m ;
int tata[MV + 5] ;
int rg[MV + 5] ;
void uneste(int x, int y) {
if (rg[x] > rg[y]) {
tata[y] = x ;
} else tata[x] = y ;
rg[x] += (rg[x] == rg[y]) ;
}
int Find(int x) {
int rez(x), aux ;
for ( ; tata[rez] != rez ; rez = tata[rez]) ;
while (tata[x] != x) {
aux = tata[x] ;
tata[aux] = rez ;
x = aux ;
}
return rez ;
}
int main() {
fscanf(in, "%d %d", &n, &m) ;
int i, x, y, cod ;
for (i = 1 ; i <= n ; ++ i) {
rg[i] = 1 ;
tata[i] = i ;
}
for (i = 1 ; i <= m ; ++ i) {
fscanf(in, "%d %d %d", &cod, &x, &y) ;
if (cod == 1) {
uneste(Find(x), Find(y)) ;
} else {
if (Find(x) != Find(y)) {
fprintf(out, "NU\n") ;
} else fprintf(out, "DA\n") ;
}
}
}