Pagini recente » Cod sursa (job #2015720) | Cod sursa (job #2073445) | Cod sursa (job #476871) | Cod sursa (job #776687) | Cod sursa (job #443376)
Cod sursa(job #443376)
#include <cstdio>
using namespace std;
FILE* fin=fopen("disjoint.in","r");
FILE* fout=fopen("disjoint.out","w");
#define MAXN 100000
int nod[MAXN],rang[MAXN],n,m;
void update(int x,int y){
if(rang[x]>rang[y]){
nod[y]=x;
}else{
nod[x]=y;
}
if(rang[x]==rang[y]){
rang[y]++;
}
}
int find(int x){
int r,y;
for(r=x;nod[r]!=r;r=nod[r]);
while(nod[x]!=x){
y=nod[x];
nod[x]=r;
x=y;
}
}
bool query(int x,int y){
return find(x)==find(y);
}
int main(){
fscanf(fin,"%d %d\n",&n,&m);
for(int i=1;i<=n;i++){
nod[i]=i,rang[i]=1;
}
int tip,x,y;
for(int i=0;i<m;i++){
fscanf(fin,"%d %d %d\n",&tip,&x,&y);
switch(tip){
case 1:
update(x,y);
break;
case 2:
if(query(x,y)){
fprintf(fout,"DA\n");
}else{
fprintf(fout,"NU\n");
}
break;
}
}
fclose(fin);
fclose(fout);
return 0;
}