Pagini recente » Cod sursa (job #2404069) | Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 | Cod sursa (job #473370) | Cod sursa (job #1290048) | Cod sursa (job #631719)
Cod sursa(job #631719)
#include <cstdio>
using namespace std;
const int N=100001;
struct punct{
int tata,h;
}v[N];
int n,m;
inline int root(int x){
int rad,clonex,inaltime=0;
clonex=x;
while(v[x].tata!=x){
x=v[x].tata;
inaltime++;
}
rad=x;
x=clonex;
v[x].h=inaltime;
while(v[x].tata!=x){
v[x].tata=rad;
v[x].h=inaltime;
x=v[x].tata;
}
return rad;
}
void citire(){
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int i,op,x,y,radx,rady;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i){
v[i].tata=i;
}
for(i=1;i<=m;++i){
scanf("%d%d%d",&op,&x,&y);
radx=root(x);
rady=root(y);
if(op==1){
if(v[radx].h<v[rady].h){
v[radx].tata=rady;
}
else{
v[rady].tata=radx;
}
}
else{
if(radx==rady)
printf("DA\n");
else
printf("NU\n");
}
}
}
int main(){
citire();
return 0;
}