Pagini recente » Cod sursa (job #250941) | Cod sursa (job #1493690) | Cod sursa (job #2151873) | Cod sursa (job #635048) | Cod sursa (job #636277)
Cod sursa(job #636277)
#include <fstream>
#include <stdio.h>
#include <string.h>
using namespace std;
//ifstream f("disjoint.in");
//ofstream g("disjoint.out");
FILE *f=fopen("disjoint.in","r");
FILE *g=fopen("disjoint.out","w");
int n,x,y,op,r[1000015],t;
inline void upgrade(int x,int y){
register int rx=x,ry=y;
while(r[rx]>0)
rx=r[rx];
while(r[ry]>0)
ry=r[ry];
if(r[rx]<r[ry]){
r[rx]+=r[ry];
r[ry]=rx;
}
else{
r[ry]+=r[rx];
r[rx]=ry;
}
}
inline bool querry(int x,int y){
register int rx=x,ry=y;
while(r[rx]>0)
rx=r[rx];
while(r[ry]>0)
ry=r[ry];
return (rx==ry);
}
int main(void){
register int i,j;
//f>>n>>op;
fscanf(f,"%d %d",&n,&op);
memset(r,-1,4*n+8);
for(;op>0;op--){
//f>>t>>x>>y;
fscanf(f,"%d %d %d",&t,&x,&y);
if(t==1){
upgrade(x,y);
continue;
}
if(querry(x,y)){
//g<<"DA"<<"\n";
fprintf(g,"DA\n");
continue;
}
//g<<"NU"<<"\n";
fprintf(g,"NU\n");
}
return 0;
}