Pagini recente » Cod sursa (job #863793) | Cod sursa (job #2527536) | Cod sursa (job #913854) | Cod sursa (job #1975965) | Cod sursa (job #2939996)
#include <iostream>
#include <vector>
#include <assert.h>
#include <cstdio>
std::vector<int> parent(100001),size(100001);
int a, x, y;
int getRoot(int u)
{ if(parent[u]==u)
return u;
else return parent[u]=getRoot(parent[u]);
}
bool join(int u, int v)
{ u=getRoot(u);
v=getRoot(v);
if(u!=v)
{ if(size[u]<size[v])
std::swap(u,v);
assert(size[u]>=size[v]);
parent[v]=u;
size[u]+=size[v];
}
return u!=v;
}
int main(){
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int mult,op;
std::cin>>mult>>op;
for(int i=1;i<=mult;i++)parent[i]=i,size[i]=1;
while(op)
{ std::cin>>a>>x>>y;
if(a==1)join(x,y);
else if(getRoot(x)==getRoot(y))std::cout<<"DA\n";
else std::cout<<"NU\n";
op--;
}
return 0;
}