Pagini recente » Cod sursa (job #3157465) | Cod sursa (job #2794135) | Cod sursa (job #279684) | Cod sursa (job #2454705) | Cod sursa (job #1253634)
#include <stdio.h>
#define MAXN 100000
int t[MAXN+1], h[MAXN+1];
int find(int p){
if(t[p]==p){
return p;
}
t[p]=find(t[p]);
return t[p];
}
inline void unite(int x, int y){
int rx, ry;
rx=find(x);
ry=find(y);
if(h[rx]<h[ry]){
t[rx]=ry;
}else if(h[rx]>h[ry]){
t[ry]=rx;
}else{
t[rx]=ry;
h[ry]++;
}
}
inline void init(int n){
int i;
for(i=1; i<=n; i++){
h[i]=1;
t[i]=i;
}
}
int main(){
int n, q, i, x, y, t;
FILE *fin, *fout;
fin=fopen("disjoint.in", "r");
fout=fopen("disjoint.out", "w");
fscanf(fin, "%d%d", &n, &q);
init(n);
for(i=0; i<q; i++){
fscanf(fin, "%d%d%d", &t, &x, &y);
if(t==1){
unite(x, y);
}else{
if(find(x)==find(y)){
fprintf(fout, "DA\n");
}else{
fprintf(fout, "NU\n");
}
}
}
fclose(fin);
fclose(fout);
return 0;
}