Pagini recente » Cod sursa (job #542882) | Cod sursa (job #2025525) | Cod sursa (job #334611) | Cod sursa (job #1148081) | Cod sursa (job #1669032)
#include <cstdio>
using namespace std;
const int NMAX = 100000;
int t[NMAX + 5];
int h[NMAX + 5];
int FindSet(int x){
while(x != t[x])
x = t[x];
return x;
}
void UnionSet(int x, int y){
if(h[x] > h[y])
t[y] = x;
else
if(h[y] > h[x])
t[x] = y;
else{
h[x]++;
t[y] = x;
}
}
int main(){
FILE *fin, *fout;
fin = fopen ("disjoint.in", "r");
fout = fopen ("disjoint.out", "w");
int n, m, i, k, x, y, tx, ty;
fscanf(fin, "%d%d", &n, &m);
for(i = 1; i <= n; i++){
t[i] = i;
h[i] = 1;
}
for(i = 1; i <= m; i++){
fscanf(fin, "%d%d%d", &k, &x, &y);
if(k == 1){
tx = FindSet(x);
ty = FindSet(y);
if(tx != ty)
UnionSet(tx, ty);
}
else{
tx = FindSet(x);
ty = FindSet(y);
if(tx == ty)
fprintf(fout, "DA\n");
else
fprintf(fout, "NU\n");
}
}
fclose( fin );
fclose( fout );
return 0;
}