Pagini recente » Borderou de evaluare (job #1036652) | Cod sursa (job #2765381) | Cod sursa (job #2834551) | Cod sursa (job #946725) | Cod sursa (job #302594)
Cod sursa(job #302594)
#include <iostream>
#define FIN "disjoint.in"
#define FOUT "disjoint.out"
#define MAX_N 100010
using namespace std;
int P[MAX_N];
int rank[MAX_N];
int N,M;
void iofile(void){
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d%d",&N,&M);
for (int i=1;i<=N;++i) {P[i]=i;rank[i]=0;}
}
int find_set(int x){
if (x==P[x]){ return x;} else {P[x]=find_set(P[x]);return P[x];}
}
void merge_sets(int x,int y){
int sx=find_set(x);
int sy=find_set(y);
if (rank[sx]<rank[sy]){P[sx]=sy;} else {P[sy]=sx;}
if (rank[sx]==rank[sy]){++rank[sy];}
}
void solve(void){
int cod,x,y;
for (int i=1;i<=M;++i){
scanf("%d%d%d",&cod,&x,&y);
if (cod==1){ merge_sets(x,y);} else{
int sx=find_set(x);
int sy=find_set(y);
if (sx==sy){ printf("DA\n");} else {printf("NU\n");}
}
}
fclose(stdin);
fclose(stdout);
return ;
}
int main(void){
iofile();
solve();
return 0;
}